如何在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。 或者您可以更新您的正则表达式以包含空格,因此如果仅包含空字符串,它仍然被视为有效。