Ваш вопрос - это то, что я тоже пытался выяснить некоторое время. Это то, что у меня есть до сих пор.
Я использую это для проверки одного диапазона дат. Он принимает поля ввода как параметры, а не даты:
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
, чтобы он принимал даты, а не поля, и напишите правило-оболочку, чтобы принимать массив пар дат.
Если вы нашли решение проблемы, буду рад его увидеть. Надеюсь, он будет более элегантным, чем мой.
person
dnagirl
schedule
07.01.2011