从另一个看起来像它的旧堆栈帖子将完全按照需要执行,我向验证器添加了一个方法(应该)将输入与禁用值列表进行比较,然后如果输入在输入上则返回错误消息列表。
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时,它总是返回true。
userloginname: {
required: true,
notEqualTo: ['password','anotherword','#email']
使用上述内容,如果用户输入了&#34;密码&#34;,&#34; anotheword&#34;,或者用户名与电子邮件字段匹配,则应设置notEqual = false并抛出错误。
答案 0 :(得分:1)
您似乎将表示代表另一个元素的id
的单词和字符串的字符串视为同一事物。
notEqualTo: ['password','anotherword','#email']
前两个参数的根本问题在于:
if (value == $.trim($(param[i]).val()))
.val()
仅为for retrieving the value of a form element。您错误地将其附加到param
这是一个代表单词的变量。
在jQuery函数param[i]
中包装$()
,将此变量转换为jQuery对象,这是第一个两个参数所不需要的。
只需比较两个变量......
if (value === param[i])
话虽这么说,如果你的第三个参数是另一个字段的值,那么你需要与其他字符串参数分开处理。我建议使用一种方法来处理将值与单词进行比较(如在我的演示中),以及另一种完全独立的方法,用于将此字段的值与另一个字段的值进行比较。
$('#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.");
DEMO 2:jsfiddle.net/hp1dgcug/