我在之前需要的日期字段上有一个日期选择器。我试图让它不再需要,但我没有看到如何做到这一点。
表单正在使用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似乎没有像我期望的那样工作。
由于
答案 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。或者您可以更新您的正则表达式以包含空格,因此如果仅包含空字符串,它仍然被视为有效。