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

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

表单使用jQueryvalidation 。 我看到有一个必需属性可以设置为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”的消息。 我需要它来validation值是否存在,但允许空值。 如何根据需要完成此操作:false似乎没有像我期望的那样工作。

谢谢

您已编写自定义方法,就好像该字段是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 }); }); } 

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