2010-06-26 3 views
2

La fonction valide() indique: "Vérifie si le formulaire sélectionné est valide ou si tous les éléments sélectionnés sont valides."JQuery Validation Plugin: valide() renvoie false pour les champs non obligatoires

Ce qui semble impliquer que nous pouvons tester un groupe de contrôles en utilisant un sélecteur (nous testons des contrôles sur un formulaire asp.net), par exemple.

$('div[id$=pnlBillingInfo] .Field input').valid() 

Cela fonctionne si tous les champs sont obligatoires. Toutefois, si un champ ne nécessite aucune validation (required = false), alors valid() renvoie false lorsque ce champ est laissé vide.

Ce comportement ne semble pas correct - avons-nous oublié quelque chose? Nous devrions être en mesure de laisser ces champs facultatifs vides et avoir toujours le groupe de contrôles valide ok.

Si nous essayons de valider ce champ facultatif - le résultat est 'indéfini', par ex.

$("#aspnetForm").validate().element('input[id$=txtBillingAddress2]') 

jQuery 1.4.2

plugin jQuery Validation 1.7 (dernière version)

http://bassistance.de/jquery-plugins/jquery-plugin-validation/

Merci!

+0

Notez que la validation() est appelée avant de vérifier valide(), par exemple $ ('# aspnetForm'). Validate(); $ ('div [id $ = pnlBillingInfo] .Field input'). Valid() – Matt

+0

Le résultat sera indéfini s'il n'y a pas de règles, c'est le comportement attendu, ce champ a-t-il des règles * any *? –

+0

Une règle est définie (required = false). Il serait toujours logique que validate(). Retourne undefined car il n'y a rien à valider. Cependant, le vrai casse-tête est pourquoi valid() renvoie false. – Matt

Répondre

1

J'ai trouvé utile de séparer les règles de validation de formulaire de l'événement de validation (c'est-à-dire: le moment où le formulaire est soumis).

Vous devez définir des règles pour la forme - soit dans la JS ou dans le code HTML via des cours sur chaque entrée/select/etc

Je préfère le faire via JS, car il maintient le nettoyage DOM; aussi, je mets habituellement les règles du formulaire en dehors de la fonction $ (document) .ready():

$('#form').validate({ 
    rules: { 
     [...] 
    }, 
    messages: { 
     [...] 
    } 
}); 

Cela ne fait rien fonctionnel. Il définit simplement les règles. Lorsque vous devez valider réellement la forme, vous pouvez vérifier ces règles en tirant l'événement .valid():

$(document).ready(function(){ 
    $('#form').submit(function(){ 

      // Check validity 
      if (!$(this).valid()) return false; 

      // Form is valid, so submit it! 
      [...] 
    }); 
}); 
+0

Cela semble bon! – sbose

0

Il y a un bug sur la bibliothèque lorsque les méthodes de règles vérifier pour les champs en option avec « this.optional (élément) » . Lorsque le champ est vide this.optional renvoie "dependency-mismatch" et la méthode de validation renvoie "undefined" marquant le champ comme invalide.

explication complète ici:

https://github.com/jzaefferer/jquery-validation/issues/481

Questions connexes