如何修复jQuery日期选择器的区域设置,使其在Firefox和IE7中工作



我使用的是jQuery的日期选择器和asp.net MVC4。日期选择器在Firefox中工作,但在IE7中,我通过asp.net的验证得到消息,即该字段不是日期。

这是日期选择器的代码

if (!Modernizr.inputtypes.date) {
        $(function() {
            $.datepicker.setDefaults($.datepicker.regional['en-GB']);
            $(".datefield").datepicker();
        });
    }

这是我在Web.config 中的全球化设置

<globalization uiCulture="en-GB" culture="en-GB" />

例如,在Firefox中,日期显示为"19/03/2012"字符串,并由asp.net的验证设置(客户端和服务器端)接受。在IE7中,客户端不接受相同的日期字符串。如果我将其更改为"2012年3月19日",客户端接受该日期,但随后服务器抛出异常-"InvalidOperationException.Nullable对象必须有值。"

我的viewModel使用了一个可为null的DateTime,我在控制器post操作中将其转换为不可为null。这在Firefox中有效,但在IE7中,viewModel中的日期值为null。问题出在哪里?

以下行不起任何作用:

$.datepicker.setDefaults($.datepicker.regional['en-GB']);

如果您不包含相应的语言文件,则ASP.NET MVC 4模板中默认不包含该语言文件。

您可以尝试显式设置格式:

$.datepicker.setDefaults({ dateFormat: 'dd/mm/yy' });

但这只涉及在日期选择器中选择日期后应该如何格式化日期。它与验证无关。

客户端验证由jquery.validate插件执行,该插件反过来使用浏览器当前配置的区域性(这可能解释您在FF和IE之间观察到的差异,例如,一个可能被配置为使用en-GB,另一个可能使用en-US)或ISO日期。

您可以覆盖此自定义验证,并使其使用您的自定义格式,以确保跨浏览器工作:

if (!Modernizr.inputtypes.date) {
    $(function () {
        $.datepicker.setDefaults({ dateFormat: 'dd/mm/yy' });
        $('.datefield').datepicker();
    });
    jQuery.validator.addMethod(
        'date',
        function (value, element, params) {
            if (this.optional(element)) {
                return true;
            };
            var result = false;
            try {
                $.datepicker.parseDate('dd/mm/yy', value);
                result = true;
            } catch (err) {
                result = false;
            }
            return result;
        },
        ''
    );
}
Jquery本地化文件位于:

http://nuget.org/packages/jQuery.UI.i18n

简单运行:

安装包jQuery.UI.i18n并添加对"Scripts/jQuery-UI-i18n.js"的脚本引用

从软件包管理器控制台,这将起作用:$.datepicker.setDefaults($.datepicker.regional['en-GB'])

最新更新