Je me demandais comment faire pour que je puisse établir une règle lorsqu'un champ n'est pas égal à une valeur. Comme si j'avais un champ appelé 'nom' donc je ne veux pas 'nom' = 'Votre nom'.
Quelqu'un a-t-il une idée de la façon de procéder? Merci pour toute aide.
Vous pouvez utiliser une méthode personnalisée, quelque chose comme ceci:
jQuery.validator.addMethod("notEqual", function(value, element, param) {
return this.optional(element) || value != param;
}, "Please specify a different (non-default) value");
Ensuite, utilisez-le comme ceci:
$("form").validate({
rules: {
nameField: { notEqual: "Your Name" }
}
});
L'ajouter comme une règle comme ceci le rend plus extensible, vous pouvez donc l'utiliser pour comparer avec la valeur par défaut dans d'autres champs.
La réponse de Nick correspond à la facture. J'avais besoin de comparer deux champs du formulaire et de m'assurer qu'ils n'étaient pas égaux. Je l'ai juste modifié un peu.
jQuery.validator.addMethod("notEqual", function(value, element, param) {
return this.optional(element) || value != $(param).val();
}, "This has to be different...");
$("#cform").validate(
{
rules: {
referringsales: { required: false, notEqual: "#salesperson" }
}
});
Edité pour répondre au commentaire:
Si vous avez plus d'un ensemble de listes déroulantes à comparer, la méthode fonctionne également avec ce cas.
jQuery.validator.addMethod("notEqual", function(value, element, param) {
return this.optional(element) || value != $(param).val();
}, "This has to be different...");
$("#cform").validate(
{
rules: {
referringsales: { required: false, notEqual: "#salesperson" }
DropDown2: { required: false, notEqual: "#SecondBase" }
}
});
Si la question concerne la comparaison des références par rapport à deux bases différentes (par exemple, #initialContact et #salesperson), ajoutez simplement cette règle à la liste.
referringsales: { required: false, notEqual: "#salesperson", notEqual: "#initialContact" }
Je propose une fonction multi-valuée ...
jQuery.validator.addMethod("notEqualTo",
function(value, element, param) {
var notEqual = true;
value = $.trim(value);
for (i = 0; i < param.length; i++) {
if (value == $.trim($(param[i]).val())) { notEqual = false; }
}
return this.optional(element) || notEqual;
},
"Please enter a diferent value."
);
Et je l'appelle ...
$("#abm-form").validate({
debug: true,
rules: {
password1: {
required: true,
minlength: 10,
notEqualTo: ['#lastname', '#firstname', '#email']
},
password2: {
equalTo: '#password1'
}
}
});
Cela fonctionne pour moi!
Il y en a un appelé "notEqualTo" dans additional-methods.js dans le package de téléchargement:
https://github.com/jzaefferer/jquery-validation/blob/master/src/additional/notEqualTo.js
Vous n'êtes pas sûr d'avoir obtenu votre réponse, mais:
retourne this.optional (element) || valeur ! = param;
ne fonctionnera pas si la valeur est variable.
Il faut lire:
retourne this.optional (element) || valeur ! = $ (param) .val () ;
À votre santé
Merci pour la réponse de @Nick Craver ♦, mais dans mon environnement de travail, il doit être légèrement modifié avant de pouvoir fonctionner.
$.validator.addMethod("notEqualTo", function(value, element, param) {
return this.optional(element) || value != $(param).val();
}, 'This two elements are the same, please change it.');
Merci beaucoup, Nick !!! Un petit ajout: si vous avez quelques champs à valider dans la fonction validate (), la syntaxe devrait être la suivante:
self.logo.rules(
'add', {
notEqual: "Select the Logo"
}
);
Prenant quelques bons exemples ici, j’ai écrit une autre version qui fonctionne avec plusieurs champs pour vérifier
/*=====================================================*/
/* Jquery Valiation addMethod*/
/* Usage: password: {notEqualTo: ['#lastname', '#firstname', '#email']} */
/*====================================================*/
jQuery.validator.addMethod("notEqualTo",
function (value, element, param) {
var notEqual = true;
value = $.trim(value);
for (i = 0; i < param.length; i++) {
var checkElement = $(param[i]);
var success = !$.validator.methods.equalTo.call(this, value, element, checkElement);
// console.log('success', success);
if(!success)
notEqual = success;
}
return this.optional(element) || notEqual;
},
"Please enter a diferent value."
);
/*=====================================================*/
/*=====================================================*/
Utilisation
$("form").validate(
{
rules: {
passwordNewConfirm: {equalTo: "#passwordNew"},
passwordNew: { notEqualTo: "#password" },
password: { notEqualTo: ['#passwordNew', '#passwordNewConfirm'] }
},
});
Si vous avez juste une valeur pour laquelle vous souhaitez que ce ne soit pas comme votre question l'indique, vous pouvez vérifier cela assez facilement sans plug-in externe.
$('#yourForm').submit(function(e) {
if ( $('input[name="yourField"]').val()=='Your Name' )
e.preventDefault();
alert("Your message here");
}
});