62 votes

Comment ajouter une règle Pas égal à dans jQuery.validation

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'.

Est-ce que quelqu'un a une idée de comment faire cela? Merci pour toute aide.

123voto

Nick Craver Points 313913

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 celle-ci le rend plus extensible, vous pouvez donc l'utiliser pour comparer avec la valeur par défaut dans d'autres champs.

32voto

Frank Luke Points 565

Nick réponse correspond à la facture. J'avais besoin de comparer deux champs du formulaire et assurez-vous qu'ils n'étaient pas égales. Je l'ai modifiée 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" }
    }
});

Édité pour répondre à un commentaire:

Si vous avez plus d'un ensemble de listes déroulantes pour comparer, la méthode fonctionne également avec ce dossier.

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 referringsales contre 2 bases différentes (disons #initialContact et #vendeur), puis il suffit d'ajouter cette règle à la liste.

referringsales: { required: false, notEqual: "#salesperson", notEqual: "#initialContact" }

11voto

Jose Points 41

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!

1voto

Richard L Points 11

Je ne sais pas si vous avez eu 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é

0voto

Robert Points 12091

Si vous avez juste une valeur pour laquelle vous ne voulez pas que cela soit comme le suggère votre question, 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");
    }
});
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X