Подтвердить что ты не робот

Как добавить правило не равно правилу в jQuery.validation

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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

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

Ответ 3

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

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

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

return this.optional(element) || стоимость != param;

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

Он должен читать:

return this.optional(element) || стоимость != $(param).val();

Приветствия

Ответ 6

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

$('#yourForm').submit(function(e) {
    if ( $('input[name="yourField"]').val()=='Your Name' )
        e.preventDefault();
        alert("Your message here");
    }
});

Ответ 7

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

self.logo.rules(
    'add', {
       notEqual: "Select the Logo"
     }
);

Ответ 8

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

 $.validator.addMethod("notEqualTo", function(value, element, param) {
       return this.optional(element) || value != $(param).val();
 }, 'This two elements are the same, please change it.');