2010-09-08 5 views
0

J'utilise le plugin jQuery ajaxform pour créer des formulaires HTML ajaxed et que vous souhaitez mettre en œuvre la validation en utilisant le plugin jQuery Validation.Quelle est la meilleure approche pour utiliser ajaxform avec la validation jQuery?

Je ne suis pas sûr de la meilleure façon de l'implémenter.

Cela ne fonctionne pas pour moi-même. J'ai mis en place le formulaire avec form.ajaxform({}) et ensuite mis en place la validation avec form.validate({}). L'événement invalidHandler se déclenche sur le plug-in de validation, mais ajaxform soumet toujours le formulaire.

Comment câbler les deux correctement?


Mon code:

_initializeValidation: function (form) { 

    var options = { 
     rules: 
      { 
       Name: 
       { 
        required: true 
       } 
      }, 
     messages: 
      { 
       Name: "Name is required", 
       ShortName: "Short name is required" 
      } 
    }; 

    if (form.find("#ShortName").length == 1) 
     $.extend(options.rules, { ShortName: { required: true} }); 

    form.validate(options); 
} 

/* 
* Initializes a newly loaded edit form 
*/ 
_initializeEdit: function (panel) { 
    var thisDetailTab = this; 
    var form = panel.find("form"); 
    form.ajaxForm(
     { 
      target: panel, 
      url: this._config.updateUrl, 
      beforeSubmit: function (arr, $form, options) { 
       return form.valid(); 
      }, 
      success: function (responseText, statusText, xhr, form) { 
       thisDetailTab._initializeDetails(panel); 
       thisDetailTab._config.refreshSummary(); 
      } 
     } 
    ); 

    this._initializeValidation(form); 

    var cancelButton = panel.find(".cancelButton"); 
    cancelButton.click(function (event) { 
     $.ajax(
      { 
       url: thisDetailTab._config.detailsUrl, 
       success: function (data) { 
        panel.empty(); 
        panel.append(data); 
        thisDetailTab._initializeDetails(panel); 
       } 
      } 
     ); 
    }); 
} 
+0

Pourriez-vous coller du code sur la façon dont vous utilisez l'ajaxform? J'ai de l'expérience avec le plugin validation mais pas avec ajaxform :( –

+0

J'ai maintenant ajouté l'appel 'valid()' à l'évènement beforeSubmit, il semble faire ce que je veux, et c'est assez simple. – GiddyUpHorsey

Répondre

1

Au lieu de .ajaxForm(), utilisez .ajaxSubmit() dans vos submitHandler (qui ne se déclenche sur le succès), comme ceci:

$("form").validate({ 
    rules: { ... }, 
    submitHandler: function(form) { 
    $(form).ajaxSubmit({ ...options... }); 
    } 
}); 

De cette façon il ne tente de faire une soumission AJAX que si la validation est réussie le invalidHandler est tiré). Si vous voulez voir un exemple en direct, voici the related validation plugin demo.

+0

Avant de lire votre réponse, j'ai ajouté un appel '.valid()' à 'beforeSubmit' qui semble fonctionner.Etes-vous conscient des différences, avantages/inconvénients entre le – GiddyUpHorsey

+0

@GiddyUpHorsey - l'une ou l'autre façon fonctionne, mais à moins que vous ne supprimiez le gestionnaire d'événement 'submit', vous pouvez exécuter la validation deux fois, mais c'est * habituellement * ok, si inefficace. –

Questions connexes