web-dev-qa-db-fra.com

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

Quelqu'un a-t-il une idée de la façon de procéder? Merci pour toute aide.

57
Kyle Hotchkiss

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.

115
Nick Craver

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" }
32
Frank Luke

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!

10
Jose

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

4
TrueWill

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é

1
Richard L

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.');
0
Xiao Ai

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"
     }
);
0
Sasha.M

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'] }
            },
        });
0
Ravi Ram

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");
    }
});
0
Robert