Ненавязчивая проверка на даты en-GB

Я проектирую форму ввода данных, используя asp.net MVC4, который имеет тип ввода даты.

Используя ненавязчивую библиотеку jQuery в chrome и jQueryUI datepicker, я все еще получал ошибку (поле news_date должно быть date.), После выбора правильного формата даты, с помощью datepicker (т.е. 14/02/2013) и отправки формы.

Некоторые поиски предложили мне использовать библиотеку jQuery.globilization. Поэтому после прочтения документации я добавил ссылку на следующий скрипт.

$(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 или представляет проверку, которая является проблемой.

ОБНОВЛЕНИЕ после выбора даты, если я бегу $('#news_date').val() в консоли Chrome я получаю "2014-02-14", и я могу отлаживать свой скрипт и видеть, как передается значение, это метод валидатора, именно это значение и, следовательно, он не соответствует британскому формату даты, возвращая, таким образом, ноль, а не значение, которое пройдет проверку. Так есть ли у меня проблема с тем, как средство выбора даты сохраняет дату после выбора?

Кто-нибудь нашел обходной путь для этого в Chrome?

3 ответа

Решение

Этот обходной путь, кажется, обрабатывает Chrome и т. Д. В Chrome я не могу ввести неправильную дату, поэтому средство выбора даты даст мне правильную дату, и когда она передаст ее функции проверки, она будет в формате гггг-мм-дд. т. е. позволяет мне вводить данные прямо во ввод или использовать средство выбора, вводя недопустимую дату, т. е. 30.02.2013 (недопустимо в англоязычной культуре), это правильно делает ее недействительной и препятствует дальнейшему прогрессу. Если нет лучших предложений, я думаю, что я не согласен с этим как с лучшим ответом

$(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");
}});
$(function () {
        $(".datepicker").datepicker({ dateFormat: 'dd/mm/yy' });
 });

Могу ли я порекомендовать вам еще одну работу? Поместите это в ваш web.config, чтобы избежать проблем с настройками другой культуры.

<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="en-GB" uiCulture="en-GB"/>

И в Jquery DatePicker этого было бы достаточно,

 $(function () {
        $(".datepicker").datepicker({ dateFormat: "dd/MM/yyyy" });
 });
Другие вопросы по тегам