jQuery.validator.addMethod和required vs optional

时间:2014-09-28 06:39:11

标签: jquery jquery-validate

对于以下代码,

jQuery.validator.addMethod
(
      "exactlength",

      function(value, element, param) 
      {
           return this.optional(element) || value.length == param;
      },

      jQuery.format("Please enter exactly {0} characters.")
);

我理解

  • value是指输入字段值
  • element指的是输入字段本身
  • param指的是规则
  • 的属性值
  • value.length == param是指实际验证

但我不太明白为什么this.optional(element) ||包含在必填字段中。我在addMethod看到的大多数例子似乎都有这部分条款。但是为什么它是强制性的,即使对于required的字段也是如此。

其次,假设我想要电子邮件验证,我会添加类似的内容,

email: 
{
    required: true,
    email: true,
},

我还要添加以下内容,

jQuery.validator.addMethod
(
      "minLengthID",

      function(value, element, param) 
      {
           return this.optional(element) || value.length >= param;
      },

      jQuery.format("Please enter more than {0} characters.")
);


jQuery.validator.addMethod
(
      "maxLengthID",

      function(value, element, param) 
      {
           return this.optional(element) || value.length <= param;
      },

      jQuery.format("Please enter less than {0} characters.")
);

但我不明白为什么this.optional(element) ||在这里是必要的。我会很感激任何指示。

1 个答案:

答案 0 :(得分:2)

首先,minlengthmaxlengthemail规则完全吻合。

$('#myform').validate({
    rules: {
        emailaddress: {
            required: true,
            email: true,
            minlength: 6,
            maxlength: 30
        }
    }
});

<强> DEMO: http://jsfiddle.net/arex5q69/

但请注意,在评估emailminlength规则之前,您需要满足maxlength规则。另请注意,一个非常短的电子邮件地址a@b.com长度为六个字符,因此您的minlength: 6规则会立即得到满足。

相反,如果您将minlengthmaxlength规则放在 email规则之前,那么它们将首先进行评估。

$('#myform').validate({
    rules: {
        emailaddress: {
            required: true,
            minlength: 6,
            maxlength: 30,
            email: true
        }
    }
});

<强> DEMO 2: http://jsfiddle.net/arex5q69/1/


this.optional(element) ||作为自定义规则的一部分,只需在单独使用此规则时将您的字段设为

但是,当您将“可选”自定义规则与required: true结合使用时,这是一个没有实际意义的点,因为该字段永远不会是可选的。

您将this.optional(element) ||置于自定义规则中的原因是,它使您能够在有{J}个规则的字段上使用它。

否则,如果您遗漏required,即使您可能不想要字段{{1},您的自定义规则也会始终创建字段this.optional(element) || }