从另一个较旧的堆栈帖子中看起来完全可以根据需要进行,我在验证器中添加了一种方法,该方法(应该(将输入比较到违禁值列表,然后返回一个错误消息如果输入在列表中。
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;
},"The value you entered is not permitted in this field.");
问题似乎是在比较中。无论我指定什么是被禁止的值,当看起来应该在匹配中返回false时,这总是返回的。
userloginname: {
required: true,
notEqualTo: ['password','anotherword','#email']
使用上述内容,如果用户输入"密码"," anotheword"或用户名与电子邮件字段匹配,则应设置notequal = false并丢弃错误。
您似乎正在处理代表代表另一个元素的 id
的单词和字符串作为同一事物的字符串。
notEqualTo: ['password','anotherword','#email']
前两个参数的根问题在这里:
if (value == $.trim($(param[i]).val()))
.val()
仅用于检索表单元素的值。您错误地将其连接到param
,这是一个代表单词的变量。将
param[i]
包装在jQuery函数中$()
中,将此变量变成一个jQuery对象,这是FIRS两个参数的不需要的。
只需比较两个变量...
if (value === param[i])
演示:jsfiddle.net/kwxtvur8/
说,如果您的第三个参数是另一个字段的值,那么您需要与字符串的其他参数分开处理。我建议一种方法来处理将值与单词进行比较(如我的演示中(的方法,以及将该字段与另一个字段值进行比较的另一种完全独立的方法。
$('#myform').validate({
rules: {
userloginname: {
required: true,
notEqualTo: ['password', 'anotherword'],
notEqual: '#email'
}
}
....
notEqual
方法:
jQuery.validator.addMethod('notEqual', function(value, element, param) {
value = $.trim(value);
return this.optional(element) || (value !== $.trim($(param).val()));
}, "The value you entered is not permitted in this field.");
演示2:jsfiddle.net/hp1dgcug/