你的问题也是我一段时间以来一直试图弄清楚的问题。这就是我到目前为止所拥有的。
我用它来验证单个日期范围。它将输入字段作为参数而不是日期:
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
以接受日期而不是字段,并编写一个包装规则来接受一组日期对。
如果您找到了问题的解决方案,我很乐意看到它。希望它会比我的更优雅。