Подтвердить что ты не робот

JQuery Datepicker Chrome

При использовании jQuery UI Datepicker мы устраняем проблему при использовании в Google Chrome: когда мы вводим дату с днем ​​выше 12, она не принимает ее как действительную дату, это потому, что хром считает, что формат даты равен mm/dd/yyyy. Мы попытались решить эту проблему, добавив код, чтобы попытаться установить настройки даты в dd/mm/yyyy

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

Есть ли способ решить эту проблему, поэтому наш datepicker примет значения dd/mm/yyyy? У нас есть только эта проблема в Google Chrome, датафикс работает для firefox, т.е. Сафари. Мы используем ASPX и MVC3 с этим проектом.

Если кто-то может решить нашу проблему, это было бы здорово

Спасибо

4b9b3361

Ответ 1

У меня была такая же проблема, и она связана со всеми веб-браузерами на основе Webkit. Если вы установите верхний регистр M, в текстовом поле отображается моль с буквами. Лучшим решением для меня было переопределить функцию даты проверки с помощью jquery.validate.js

Создайте файл jquery.validate.date.js и убедитесь, что он загружен после jquery.validate.js

Добавьте следующий код в jquery.validate.date.js

$(function() {
    $.validator.methods.date = function (value, element) {
        if ($.browser.webkit) {

            //ES - Chrome does not use the locale when new Date objects instantiated:
            var d = new Date();

            return this.optional(element) || !/Invalid|NaN/.test(new Date(d.toLocaleDateString(value)));
        }
        else {

            return this.optional(element) || !/Invalid|NaN/.test(new Date(value));
        }
    };
});

Ответ 2

user1011138 решение не работает для меня, поскольку .toLocaleDateString(value) не анализирует строку value

здесь решение я придумало = > в jquery.validate.js найдите это определение функции: "date: function (value, element)" и замените код на:

// http://docs.jquery.com/Plugins/Validation/Methods/date
date: function (value, element) {
    var d = value.split("/");
    return this.optional(element) || !/Invalid|NaN/.test(new Date((/chrom(e|ium)/.test(navigator.userAgent.toLowerCase())) ? d[1] + "/" + d[0] + "/" + d[2] : value));
},

Ответ 3

Создайте новый файл jquery.validate.date.js.

Вставьте следующий код внутри файла.

 $(function () {
    $.validator.methods.date = function (value, element) {
      if ($.browser.webkit) {
        var d = new Date();
        return this.optional(element) || !/Invalid|NaN/.test(new Date(d.toLocaleDateString(value)));
      }
      else {
        return this.optional(element) || !/Invalid|NaN/.test(new Date(value));
    }
  };
});

Теперь убедитесь, что этот файл загружен после файла jquery.validate.js.

Ответ 4

 $.validator.methods.date = function (value, element) {                
            if ($.browser.webkit) {                    
                var d = value.split("/");   
                return this.optional(element) || !/Invalid|NaN/.test(new Date((/chrom(e|ium)/.test(navigator.userAgent.toLowerCase())) ? d[1] + "/" + d[0] + "/" + d[2] : value));
              }
            else {
                return this.optional(element) || !/Invalid|NaN/.test(new Date(value));
            }
        };

Ответ 5

Вышеупомянутые решения не сработали, потому что проверка браузера jquery устарела, бросая jquery.validate.min.js Uncaught TypeError: Cannot read property 'webkit' of undefined. Exception occurred when checking element DateOfBirth, check the 'date'

В моем проекте я использую momentjs с bootstrap datetimepicker, поэтому это решение отлично работает:

 $(function () {
    $.validator.methods.date = function (value, element) {
        return this.optional(element) || moment(value, 'DD/MM/YYYY').isValid();
  };
});

Вызвать это право после загрузки jquery.validate()

Ответ 6

Вы должны переопределить проверку даты по умолчанию "en-US" с проверкой даты "en-GB".

  • 'en-US' = > 'mm/dd/yy'
  • 'en-GB' = > 'dd/mm/yy'

Решение:

добавьте в проект файл jquery.validate.date.js и поместите в него следующий код:

//To Fix jQuery date format 'en-GB' validation problem in Chrome
$(function () {
    $.validator.addMethod(
        "date",
        function (value, element) {
            var bits = value.match(/([0-9]+)/gi), str;
            if (!bits)
                return this.optional(element) || false;
            str = bits[1] + '/' + bits[0] + '/' + bits[2];
            return this.optional(element) || !/Invalid|NaN/.test(new Date(str));
        },
        "Please enter date in valid format [dd/mm/yyyy]"
    );
});

и убедитесь, что он загружается после "jquery.validate.min.js":

<script type="text/javascript" src="/Scripts/jquery-3.1.0.min.js"></script>
<script type="text/javascript" src="/Scripts/jquery.validate.min.js"></script>
<script type="text/javascript" src="/Scripts/jquery.validate.date.js"></script>