Я просто возился с ответом Дантеуно и обнаружил, что, несмотря на благие намерения, он, к сожалению, работает на нескольких браузерах, которые не IE. Это связано с тем, что IE будет довольно строг в отношении того, что он принимает в качестве аргумента для конструктора Date
, а другие - нет. Например, Chrome 18 дает
> new Date("66")
Sat Jan 01 1966 00:00:00 GMT+0200 (GTB Standard Time)
Это приводит к тому, что код выбирает путь «сравнения дат», и оттуда все идет вниз (например, new Date("11")
больше new Date("66")
, и это, очевидно, противоположно желаемому эффекту).
Поэтому после рассмотрения я изменил код, чтобы отдать приоритет пути «цифры» над путем «даты» и проверить, что входные данные действительно являются числовыми с отличным методом, представленным в Проверка десятичных чисел в JavaScript - IsNumeric ( ) .
В конце код становится:
$.validator.addMethod(
"greaterThan",
function(value, element, params) {
var target = $(params).val();
var isValueNumeric = !isNaN(parseFloat(value)) && isFinite(value);
var isTargetNumeric = !isNaN(parseFloat(target)) && isFinite(target);
if (isValueNumeric && isTargetNumeric) {
return Number(value) > Number(target);
}
if (!/Invalid|NaN/.test(new Date(value))) {
return new Date(value) > new Date(target);
}
return false;
},
'Must be greater than {0}.');