DatePicker上的日期验证程序在IE7/IE8中触发错误否定

Ian*_*hop 8 validation jquery jquery-validate jquery-ui-datepicker

我在包含两个jQuery UI DatePickers的表单上进行了一些基本验证.日期格式为yy-mm-dd.有一个必要的日期上都DatePickers验证.

这些在Chrome和FF中按预期工作,但在IE7/IE8中触发漏报(有效输入被认为无效).

日期选择器设置:

$('.datepicker').datepicker({
    dateFormat: 'yy-mm-dd'
});
Run Code Online (Sandbox Code Playgroud)

这是无关的,但我想我会包括,以防万一:

$.validator.addMethod("endDate", function(value, element) {
    var startDate = $('#startDate').val();
    return Date.parse(startDate) <= Date.parse(value);
});
Run Code Online (Sandbox Code Playgroud)

实际验证:

$('#ExampleForm').validate({
    rules: {    
        StartDate: {
            required: true,
            date: true
        },
        EndDate: {
            required: true,
            date: true,
            endDate: true
        }
    },
    messages: {
        StartDate: {
            required: "Start Date required",
            date: "Invalid date. Must be formatted yyyy-mm-dd"
        },
        EndDate: {
            required: "End Date required",
            date: "Invalid date. Must be formatted yyyy-mm-dd",
            endDate: "Start date must occur before end date."
        }
    },
    errorPlacement: function(error, element) {
        error.appendTo(element.parent().next());
    },
    submitHandle: function(form) {
        form.submit();
    }
});
Run Code Online (Sandbox Code Playgroud)

在IE7/IE8中,使用两个DatePickers的有效输入(仅选择日期)将导致日期错误("无效日期.必须格式化为yyyy-mm-dd").这在其他浏览器中不会发生.

它也不会产生任何Javascript错误.

提前致谢,

伊恩

And*_*ker 13

我想你正在寻找dateISO选择:

$('form').validate({
    rules: {
        StartDate: {
            required: true,
            dateISO: true
        },
        EndDate: {
            required: true,
            dateISO: true
        }
    },
    messages: {
        StartDate: {
            required: "Start Date required",
            dateISO: "Invalid date. Must be formatted yyyy-mm-dd"
        },
        EndDate: {
            required: "End Date required",
            dateISO: "Invalid date. Must be formatted yyyy-mm-dd"
        }
    },
    submitHandler: function(form) {
        form.submit();
    }
});
Run Code Online (Sandbox Code Playgroud)

IE不会以yyyy-mm-dd格式解析日期,这就是为什么date在IE中使用常规失败的原因.我相信jQuery验证只是使用Date.parsenew Date(dateString)检查有效性.要检查这一点,请尝试执行new Date("1987-11-14")并警告IE和FF中的值.你将进入NaNIE和FF中的日期对象.

这是一个有效的例子:http://jsfiddle.net/andrewwhitaker/QqSrJ/2/