如何在jQuery Validation中将此日期设置为可选?

时间:2014-10-29 13:42:47

标签: jquery jquery-validate

我在之前需要的日期字段上有一个日期选择器。我试图让它不再需要,但我没有看到如何做到这一点。

表单正在使用jQuery Validation。我看到有一个必需属性可以设置为false,但错误仍然显示。这是我正在使用的代码:

setUpValidationForDates: function() {
  $('input.datepicker').each(function(i, el) {
    $.validator.addMethod('sDateFormat', function(value, element, param) {
      return String(value).match(/^[0-9]{4}-[0-9]{2}-[0-9]{2}/);
    }, 'Must have format YYYY-MM-DD');
    $(el).rules('add', {
      required: false,
      sDateFormat: true,
      validDateString: true,
    });
  });
}

看到的消息,"必须格式为YYYY-MM-DD"字段为空时显示。我需要它来验证值是否存在,但允许空值。如何根据需要完成此操作:false似乎没有像我期望的那样工作。

由于

2 个答案:

答案 0 :(得分:2)

您已编写自定义方法,就好像该字段为required ...这就是您在字段仍然为空时收到错误消息的原因。

您需要将this.optional(element) ||添加到自定义方法中,如下所示...

$.validator.addMethod('sDateFormat', function(value, element, param) {
    return this.optional(element) || String(value).match(/^[0-9]{4}-[0-9]{2}-[0-9]{2}/);
}, 'Must have format YYYY-MM-DD');

现在,除非在相关字段中输入内容,否则不会触发自定义方法。

对自定义方法的这种编辑只会使它成为"可选"。换句话说,如果您以后希望该字段为required,只需将required: true添加到规则声明中,而无需触及此自定义方法。


其次,您只需要声明addMethod 一次 即可创建新方法。它应该从你的.each()中取出,因为它不必要地被重复调用。您也可以删除required: false,因为它已经是required规则的默认行为。

setUpValidationForDates: function() {

    $.validator.addMethod('sDateFormat', function(value, element, param) {
        return this.optional(element) || String(value).match(/^[0-9]{4}-[0-9]{2}-[0-9]{2}/);
    }, 'Must have format YYYY-MM-DD');

    $('input.datepicker').each(function(i, el) {
        $(el).rules('add', {
            // required: false, // don't need this anymore, it's default
            sDateFormat: true,
            validDateString: true
        });
    });

}

答案 1 :(得分:0)

在使用regex对其进行验证之前,请检查该值是否为null。如果为null则返回true。或者您可以更新您的正则表达式以包含空格,因此如果仅包含空字符串,它仍然被视为有效。