Как добавить правило «Не равно» в jQuery.validation - PullRequest
58 голосов
/ 26 августа 2010

Мне было интересно, как сделать так, чтобы я мог создать правило, где поле не равно значению. Как будто у меня есть поле с именем 'name', поэтому я не хочу 'name' = 'Your Name.'

У кого-нибудь есть идеи, как это сделать? спасибо за любую помощь.

Ответы [ 9 ]

119 голосов
/ 26 августа 2010

Вы можете использовать пользовательский метод, примерно такой:

jQuery.validator.addMethod("notEqual", function(value, element, param) {
  return this.optional(element) || value != param;
}, "Please specify a different (non-default) value");

Затем используйте его так:

$("form").validate({
  rules: {
    nameField: { notEqual: "Your Name" }
  }
});

Добавление этого правила, как это делает его более расширяемымтак что вы можете использовать его для сравнения со значением по умолчанию в других полях.

32 голосов
/ 17 августа 2011

Ответ Ника отвечает всем требованиям.Мне нужно было сравнить два поля в форме и убедиться, что они не равны.Я немного его изменил.

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

Отредактировано для ответа на комментарий:

Если у вас есть несколько наборов для сравнения, метод также работает с этим случаем.

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

Если вопрос касается сравнения ссылочных продаж с двумя разными базами (скажем, #initialContact и #salesperson), просто добавьте это правило в список.

referringsales: { required: false, notEqual: "#salesperson", notEqual: "#initialContact" }
10 голосов
/ 13 июля 2012

Я предлагаю многозначную функцию ...

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."
);

И я называю это ...

$("#abm-form").validate({
debug: true,
rules: {
    password1: {
        required: true,
        minlength: 10,
        notEqualTo: ['#lastname', '#firstname', '#email']
    },
    password2: {
        equalTo: '#password1'
    }
}
});

Это работает для меня!

5 голосов
/ 25 июля 2016

В файле Additional-method.js в пакете для скачивания есть файл notEqualTo:

https://github.com/jzaefferer/jquery-validation/blob/master/src/additional/notEqualTo.js

1 голос
/ 28 октября 2010

Не уверен, что получил ответ, но:

return this.optional (element) ||значение! = param;

не будет работать, если значение является переменным.

Необходимо прочитать:

return this.optional (element) ||значение! = $ (параметр) .val () ;

Приветствия

0 голосов
/ 17 ноября 2018

Взяв здесь несколько замечательных примеров, я написал другую версию, которая работает с несколькими полями для проверки

/*=====================================================*/
/* 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."
);
/*=====================================================*/
/*=====================================================*/

Использование

    $("form").validate(
        {
            rules: {
                passwordNewConfirm: {equalTo: "#passwordNew"},
                passwordNew: { notEqualTo: "#password" },
                password: { notEqualTo: ['#passwordNew', '#passwordNewConfirm'] }
            },
        });
0 голосов
/ 24 марта 2016

Спасибо за ответ @Nick Craver ♦, но в моей рабочей среде его нужно немного изменить, прежде чем он сможет работать.

 $.validator.addMethod("notEqualTo", function(value, element, param) {
       return this.optional(element) || value != $(param).val();
 }, 'This two elements are the same, please change it.');
0 голосов
/ 14 октября 2013

Большое спасибо, Ник !!!Небольшое добавление: если у вас есть несколько полей для проверки в функции validate (), синтаксис должен быть:

self.logo.rules(
    'add', {
       notEqual: "Select the Logo"
     }
);
0 голосов
/ 26 августа 2010

Если у вас есть только одно значение, если вы хотите, чтобы оно не соответствовало вашему вопросу, вы можете легко проверить это без каких-либо внешних плагинов.

$('#yourForm').submit(function(e) {
    if ( $('input[name="yourField"]').val()=='Your Name' )
        e.preventDefault();
        alert("Your message here");
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...