我正在使用jQuery.datepicker和jQuery.validate。 在我的表单中,我有多个日期范围:
2010-02-10 - 2010-02-18
2010-03-01 - 2010-03-12
2010-03-15 - 2010-03-19
等
现在我需要验证datepicker字段以检查datepicker中设置的日期是否在这些日期范围之间。例如,2010-01-01将无效,2010-02-19也是如此。
我见过很多答案,但据我所知,它们与多个范围无关。
有没有人知道一个解决方案,或者至少有一个指针让我朝着正确的方向前进。 我想可能在.each()中循环每个日期范围并在那里运行验证。但可能有更好的方法。
答案 0 :(得分:1)
你的问题是我一直试图弄清楚的。这是我到目前为止所做的。
我用它来验证单个日期范围。它将输入字段作为参数而不是日期:
jQuery.validator.addMethod("rangeDate", function(value, element, params) {
try {
var beforedate=$.datepicker.parseDate($(params[0]).datepicker('option','dateFormat'),$(params[0]).val());
var afterdate=$.datepicker.parseDate($(params[1]).datepicker('option','dateFormat'),$(params[1]).val());
var qdate=$.datepicker.parseDate($(element).datepicker('option','dateFormat'),value);
return this.optional(element) || (qdate >= beforedate && qdate<=afterdate);
} catch(err){
return false;
}
}, function(params){
return "Date must occur between " + $(params[0]).val() + ' and ' + $(params[1]).val();
}
);
,规则如下:
rules:{
between_date: { dateCan: true,
rangeDate: {
depends: function(element) { //check that params exist
return $("input[name='before_date']").valid()
&& $("input[name='after_date']").valid();
},
param: ["input[name='before_date']", "input[name='after_date']"]
}
}
}
经过一番实验后,我发现一个字段可能有多个rangeDate
规则。但是,最后一次调用似乎会覆盖该字段的所有先前rangeDate
次调用的结果。所以我认为可能有用的是添加另一个自定义规则,该规则接受可以馈送到rangeDate
的一组字段对。这种方法的问题在于,depends
规则的rangeDate
子句变得难以处理,因为您获得了更多的日期对。如果您只需要至少一对而不是所有对,则尤其如此。
当然,如果日期范围不是动态的,则问题更容易,因为不需要depends
子句。只需重写rangeDate
以接受日期而不是字段,并编写包装规则以接受一组日期对。
如果你找到了问题的解决方案,我很乐意看到它。希望它会比我的更优雅。