J’ai réussi à configurer le plug-in de validation jQuery sur mon formulaire et j’ai donné des règles pour deux champs dans lesquels leurs valeurs ne doivent pas correspondre. Plus précisément, les entrées email et email_2 ne peuvent plus être les mêmes, et cela fonctionne. Mais mon vrai besoin est de valider plusieurs entrées de la même manière (dans ce cas, 4 d’entre elles). J’ai un email, email_2, email_3, email_4 et aucun d’entre eux ne devrait être égal. Vous pouvez le voir dans mon jsfiddle ici , et si vous avez une solution, vous pouvez le mettre à jour et le remettre en réponse:
html:
$.validator.addMethod("notequal", function(value, element) { return $('#email').val() != $('#email_2').val()}, "* You've entered this one already"); // validate form $("#signupform").validate({ rules: { email: { required: true, notequal: true }, email_2: { required: true, notequal: true }, }, });
Quelle est la meilleure solution pour valider toutes les entrées?
Oui, cela fonctionne toujours avec 1.10.1
DEMO
HTML
jQuery
jQuery.validator.addMethod("notEqualToGroup", function (value, element, options) { // get all the elements passed here with the same class var elems = $(element).parents('form').find(options[0]); // the value of the current element var valueToCompare = value; // count var matchesFound = 0; // loop each element and compare its value with the current value // and increase the count every time we find one jQuery.each(elems, function () { thisVal = $(this).val(); if (thisVal == valueToCompare) { matchesFound++; } }); // count should be either 0 or 1 max if (this.optional(element) || matchesFound <= 1) { //elems.removeClass('error'); return true; } else { //elems.addClass('error'); } }, jQuery.format("Please enter a Unique Value.")) // validate form $("#signupform").validate({ rules: { email: { required: true, notEqualToGroup: ['.distinctemails'] }, email_2: { required: true, notEqualToGroup: ['.distinctemails'] }, email_3: { required: true, notEqualToGroup: ['.distinctemails'] }, email_4: { required: true, notEqualToGroup: ['.distinctemails'] }, }, });
Vous pouvez utiliser $ .unique ():
uniqArray = $.unique(emailsArray); if (uniqArray.length != emailsArray.length) { }
uniqArray = emailsArray.slice(); $.unique(uniqArray); if (uniqArray.length != emailsArray.length) { }