jquery - 对 en-GB 日期进行不显眼的验证

标签 jquery asp.net-mvc asp.net-mvc-4 unobtrusive-validation jquery-globalization

我正在使用 asp.net MVC4 设计一个数据输入表单,它具有日期类型的输入。

在 chrome 和 jQueryUI datepicker 中使用不显眼的 jQuery 库,在选择正确的日期格式、使用 datepicker(即 14/02/2013)并提交后,我仍然收到错误(字段 news_date 必须是日期。)表格。

一些searching建议我应该使用 jQuery.globilization 库。所以读完documentation后我添加了对以下脚本的引用。

$(document).ready(function () {
    $.culture = Globalize.culture("en-GB");
    $.validator.methods.date = function (value, element) {
        return this.optional(element) || Globalize.parseDate(value, "dd/MM/yyyy", "en-GB");
    }
});

但是我仍然收到错误

如果我在 Chrome 中调试上述代码,我可以看到“value) 的值为“2014-02-14”。

下面是渲染的 html。

<div class="editor-field">

<input class="text-box single-line datepicker hasDatepicker input-validation-error" data-val="true" data-val-date="The field news_date must be a date." id="news_date" name="news_date" type="date" value="">
<script type="text/javascript">
    $(function () {
        $(".datepicker").datepicker({ dateFormat: "dd/MM/yyyy" });
    });
    </script>
            <span class="field-validation-error" data-valmsg-for="news_date" data-valmsg-replace="true"><span for="news_date" class="" style="">The field news_date must be a date.</span></span>
        </div>

更新:顺便说一句,如果我将验证器方法更改为硬编码。 即

$.validator.methods.date = function (value, element) {
    return this.optional(element) || Globalize.parseDate("14/03/2014", "dd/MM/yyyy", "en-GB")
}

它有效。因此,它显然是在 POST 或提交验证之前存储在页面上的日期的格式,这就是问题所在。

更新 选择日期后,如果我在 Chrome 控制台中运行 $('#news_date').val() ,我会得到“2014-02-14”,我可以调试我的脚本并看到该值将其传递给验证器方法时,它是这个值,因此它与英国日期格式不匹配,因此返回 null,而不是会通过验证的值。那么我的问题是日期选择器如何在选择后存储日期吗?

有人在 Chrome 中找到了解决此问题的方法吗?

最佳答案

此解决方法似乎可以处理 chrome 和 ie 等。在 chrome 中,我无法输入错误的日期,因此日期选择器将为我提供一个有效的日期,当它将其传递给验证器函数时,它将位于 yyyy-mm- 中dd 格式。也就是说,让我直接在输入中输入或使用选择器,输入无效日期,即 2/30/2013(在 en-GB 文化中无效),它会正确地使其无效并阻止进一步的进展。如果没有更好的建议,我认为我会将此作为最佳可行的答案

$(document).ready(function () {
$.culture = Globalize.culture("en-GB");
$.validator.methods.date = function (value, element) {
    //This is not ideal but Chrome passes dates through in ISO1901 format regardless of locale 
    //and despite displaying in the specified format.

    return this.optional(element)
        || Globalize.parseDate(value, "dd/mm/yyyy", "en-GB")
        || Globalize.parseDate(value, "yyyy-mm-dd");
}});

关于jquery - 对 en-GB 日期进行不显眼的验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15147080/

相关文章:

asp.net - SSO 表单例份验证问题。无法解密身份验证 cookie

jQuery UI 使效果不那么突然和生涩

jQuery - 切换和删除类

Twitter 主页中的 jQuery "push down"列表

jquery - 整个 DIV 可点击,悬停在跨度上时除外

asp.net-mvc - 表单例份验证和子域

asp.net-mvc - ASP.NET MVC 2 中的 DataAnnotations - 阻止 MVC 将 RequiredAttribute 应用于不可为空的 DateTime 等属性

css - 独立cshtml相对路径资源未加载

c# - 流畅的 API = 数据注释?

javascript - 使用参数 MVC 4 javascript 调用操作方法