jquery 验证 notEqualTo 添加的方法

jquery validate notEqualTo added method

从另一个看起来会完全按照需要执行的旧堆栈 post,我向验证器添加了一个方法,该方法(应该)将输入与禁止值列表进行比较,然后 return 如果输入在列表中,则出现错误消息。

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

问题好像出在比较上。无论我指定什么作为禁止值,这总是 return 为真,当它看起来应该 return 为匹配时为假。

userloginname: {
    required: true,
    notEqualTo: ['password','anotherword','#email']

使用上面的方法,如果用户输入 "password"、"anotheword",或者用户名与电子邮件字段匹配,它应该设置 notEqual = false 并抛出错误。

您似乎将表示单词的字符串和表示另一个元素的 id 的字符串视为同一事物。

notEqualTo: ['password','anotherword','#email']

前两个参数的根本问题在这里:

if (value == $.trim($(param[i]).val()))
  1. .val() 只是 for retrieving the value of a form element。您错误地将它附加到 param 这是一个代表单词的变量。

  2. 在 jQuery 函数中包装 param[i]$(),将这个变量变成一个 jQuery 对象,这是你不需要的在前两个参数的情况下需要。

简单比较两个变量...

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/