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 с этим проектом.
Если кто-то может решить нашу проблему, это было бы здорово
Спасибо
Ответы
Ответ 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>