Как добавить правило не равно правилу в jQuery.validation
Мне было интересно, как сделать так, чтобы я мог создать правило, в котором поле не равно значению. Например, у меня есть поле под названием "имя", поэтому я не хочу "name" = "Your Name".
Есть ли у кого-нибудь представление о том, как это сделать?
спасибо за любую помощь.
Ответы
Ответ 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'
}
}
});
Это работает для меня!
Ответ 4
В пакете загрузки один из них называется "notEqualTo" в дополнительных-методах .js:
https://github.com/jzaefferer/jquery-validation/blob/master/src/additional/notEqualTo.js
Ответ 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.');