jQueryvalidation(日期范围)
我使用jQueryvalidation插件,并想知道是否有办法validation输入到字段中的日期是否是yyyy-mm-dd的日期,日期是2010年11月29日 – 2010年12月15日之间
我是jQuery的新手,所以如果有答案,请尽可能地愚弄答案,这样我就能度过难关。 非常感谢任何/所有建议
如果你想要一个可重用的函数,你可以扩展Emily和lonesomeday的答案以允许提供一个参数:
$.validator.addMethod('daterange', function(value, element, arg) { // Same as above var startDate = Date.parse(arg[0]), endDate = Date.parse(arg[1]), enteredDate = Date.parse(value); // Same as below }, $.validator.format("Please specify a date between {0} and {1}."))
有关示例,请参阅jQueryvalidation范围方法的来源 。
我从来没有使用过validation插件,但通过API看看这样的东西可能会起作用:
$.validator.addMethod('daterange', function(value, element) { if (this.optional(element)) { return true; } var startDate = Date.parse('2010-11-29'), endDate = Date.parse('2010-12-15'), enteredDate = Date.parse(value); if (isNan(enteredDate)) { return false; } return ((startDate <= enteredDate) && (enteredDate <= endDate)); });
我认为,您需要将daterange
类添加到相应的元素中。
lonesomeday的答案非常接近,只需进行一些调整。 我将结束以下代码:
if(isNaN(enteredDate)) return false; return ((startDate <= enteredDate) && (enteredDate <= endDate)); }, "Please specify a date between 2010-11-29 and 2010-12-15");
这会修复isNaNfunction,并向用户提供错误消息,以便他们知道您要查找的内容。
伙计们,抓住你的马! 🙂
不要忘记,Date.parse无法与不同的语言环境一起正常工作,它只能正确解析特定的日期格式。
如果您使用各种日期格式(特定于文化) – 最好坚持使用jquery datepicker日期处理。
因此,假设您已加载了正确的特定于文化的jquery datepicker对象(例如,jquery.ui.datepicker-nb-NO.js,其中日期格式为DD.MM.yyyy且未由Date.parse解析)并初始化它,正确的方法是:
$.validator.addMethod('dateRange', function (value, element, parameterValue) { if (this.optional(element) && !value) { return true; } var dateFormat = $(element).datepicker('option', 'dateFormat'); try { var startDate = $.datepicker.parseDate(dateFormat, parameterValue[0]).getTime(); var endDate = $.datepicker.parseDate(dateFormat, parameterValue[1]).getTime(); var enteredDate = $.datepicker.parseDate(dateFormat, value).getTime(); return (startDate <= enteredDate) && (enteredDate <= endDate); } catch (error) { return true; } });
我把parseDate的东西放在try块里面,因为没有正常的方法来判断日期是否已被正确解析。
在Connor的代码中进行了一些小修正。
生成的工作代码是:
$.validator.addMethod('daterange', function(value, element, arg) { if (this.optional(element) && !value) { return true; } var startDate = Date.parse(arg[0]), endDate = Date.parse(arg[1]), enteredDate = Date.parse(value); if (isNaN(enteredDate)) { return false; } return ( (isNaN(startDate) || (startDate <= enteredDate)) && (isNaN(endDate) || (enteredDate <= endDate))); }, $.validator.format("Please specify a date between {0} and {1}."));
然后像这样使用它:
$("#some_date_input").rules("add",{daterange:['01/31/2001','01/31/2020']});
日期类型input
日期范围min
/ max
属性