2009-07-23 13 views
0

J'ai ajouté une méthode sur jQuery validateur comme celui-civalidation jQuery méthode personnalisée ne fonctionne pas

$.validator.addMethod(
     'myEqual', 
     function (value, element) { 
      return value == element.value; // this one here didn't work 
     }, 
     'Please enter a greater year!' 
    ); 

    $.metadata.setType("attr", "validate"); 

    $("#educationForm").validate({ 
     showErrors: function(errorMap, errorList) { 
      this.defaultShowErrors(); 
     }, 
     errorPlacement: function(error, element) { 
      error.appendTo(element.parent("td").next("td")); 
     }, 
     /*success: function(label) { 
      label.text("ok!").addClass("success"); 
     },*/ 
     rules: { 
      txt_end: { 
       required: true, 
       myEqual: "#txt_begin" 
      } 
     }, 
     submitHandler: function() {} 
    }); 

la forme ressemble à ceci

<div id="wrapper_form"> 
    <form id="educationForm" name="educationForm" method="post" action=""> 
    <table width="500" border="0"> 
     <tr> 
     <td width="100">Period:</td> 
     <td width="200"><input type="text" name="txt_begin" id="txt_begin" size="8" maxlength="4" class="required year ui-widget-content ui-corner-all" />&nbsp;to&nbsp; 
     <input type="text" name="txt_end" id="txt_end" size="8" maxlength="4" class="required year ui-widget-content ui-corner-all" /></td> 
     <td width="200"></td> 
     </tr> 
     <tr> 
     <td colspan="2"> 
     <input type="submit" name="btn_submit" id="btn_submit" value="Submit" class="ui-button ui-state-default ui-corner-all" /> 
     <input type="button" name="btn_cancel" id="btn_cancel" value="Cancel" class="ui-button ui-state-default ui-corner-all" /> 
     </td> 
     <td>&nbsp;</td> 
     </tr> 
    </table> 
    </form> 
</div> 

mais pourquoi la méthode personnalisée j'ai ajouté n'a pas travail?

return value == element.value; // this one here didn't work 

il retourne toujours vrai pour toute valeur suis-je manque quelque chose ici? Je n'ai pas utilisé la méthode intégrée car plus tard dans la forme je devrais écrire une autre méthode pour vérifier supérieur ou égal et inférieur ou égal ("> =" et "< =") J'ai testé cette méthode avec supérieur ou égal et inférieur ou égal en remplaçant le "==" par "> =" ou par "< =" Cela ne fonctionnait pas non plus

Répondre

3

En lisant votre code, je vois qu'avec votre méthode personnalisée, vous essayez de comparer deux entrées de texte, vous passez un paramètre à votre validateur: myEqual: "#txt_begin".

Pour ce faire, vous devez gérer le troisième paramètre de la fonction de rappel de addMethod:

$.validator.addMethod('myEqual', function (value, element, param){// param will 
    return value == $(param).val();        // have 
}, 'Message');             // "#txt_begin" 
+0

merci, je vais essayer votre suggestion :) –

+0

Je l'ai essayé, ne fonctionne toujours pas J'ai vérifié le contenu param était "txt_begin" et le contenu $ (param) .value était "undefined": D btw J'utilise Firefox 3.5.1 Y at-il un problème avec ce navigateur? n'a pas vérifié en utilisant un autre navigateur –

+0

Désolé, j'ai eu une faute de frappe sur le code, vous pouvez vérifier un exemple de travail ici: http://jsbin.com/ecoko – CMS

0

Pourquoi n'utilisez-vous pas la méthode 'equalTo' fournie par le Valider le plugin?

rules { 
    txt_begin : 'required' , 
    txt_end: { equalTo: '#txt_begin' } 
} 

Vous ne devez mettre requis pour txt_end car il devra être égal à txt_begin et txt_begin est un champ obligatoire.

+0

merci beaucoup, je l'ai modifié la question pour une question plus descriptive je fais face. Désolé de ne pas être direct :) –

+0

C'est okie. Si vous ne souhaitez pas utiliser equalTo, utilisez l'approche de CMS pour que votre règle personnalisée fonctionne. – SolutionYogi

Questions connexes