jquery验证notEqualTo添加方法

时间:2017-06-05 16:16:41

标签: jquery jquery-validate

从另一个看起来像它的旧堆栈帖子将完全按照需要执行,我向验证器添加了一个方法(应该)将输入与禁用值列表进行比较,然后如果输入在输入上则返回错误消息列表。

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并抛出错误。

1 个答案:

答案 0 :(得分:1)

您似乎将表示代表另一个元素的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对象,这是第一个两个参数所不需要的。

  3. 只需比较两个变量......

    if (value === param[i])
    

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

    DEMO 2:jsfiddle.net/hp1dgcug/