Chrome type = "date" и jquery ui date picker clashing
У меня есть поле ввода с типом = "дата", все работает отлично в IE, но в последней версии Chrome он поставляется с прядильщиком, стрелкой вниз и с помощью заполнитель mm/dd/yyyy.
В Chrome, щелкнув это поле, Chrome открывает датпикер, и я применил jquery ui datepicker для моего использования приложения. Они оба сталкиваются с ними, как показано ниже:
![enter image description here]()
![RED show jquery ui date picker below chrome date picker]()
Я применил исправление, как показано ниже:
input[type="date"]::-webkit-calendar-picker-indicator{
display:none;
-webkit-appearance: none;
margin: 0;
}
input[type="date"]::-webkit-inner-spin-button {
/* display: none; <- Crashes Chrome on hover */
-webkit-appearance: none;
margin: 0;
}
/** THIS DOESN'T WORK **/
input[type="date"]::-webkit-input-placeholder{
display:none !important;
-webkit-appearance: none !important;
visibility: hidden !important;
}
/** THIS DOESN'T WORK **/
После добавления вышеуказанного кода он выглядит как мудрый:
![enter image description here]()
В приведенном выше коде прячется прядильщик и стрелка, которые запускают сборщик хромированных данных. Но есть проблема, placeholder ('mm/dd/yyyy') все еще присутствует для входного текстового поля; мой jquery ui date picker подходит нормально, но когда я выбираю любые даты, местозаполнитель все еще там.
В этом поле ввода нет значения.
Необходимо знать, как удалить этот заполнитель для установки значения; также формат даты, который я использую для приложения, равен yyyy/mm/dd.
Версия Chrome: Версия 27.0.1448.0
Спасибо заранее!
Ответы
Ответ 1
Я обработал сложный путь, у меня есть поле даты как type="text"
, и я добавил атрибут как data-type="date"
В jquery я запускаю код для динамической замены type="text
и data-type="date"
на type="date"
, поэтому браузер не делает его поле даты при загрузке, но мой jquery ui datepicker вызывается как я динамически добавив его как type="date"
...:)
Надеюсь, что это кому-то полезно.
Ответ 2
Chrome 27 теперь поддерживает типы полей datepicker (как и Opera)
Вы можете проверить с помощью modernizr.js, если поле даты поддерживается. Modernizr.inputtypes.date возвращает true, если поле даты поддерживается браузером.
Следующий код устанавливает JQuery UI datepicker, только если поле даты не поддерживается:
<script src="modernizr.js"></script>
<script>Modernizr.load({
test: Modernizr.inputtypes.date,
nope: ['http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.7/jquery-ui.min.js', 'jquery-ui.css'],
complete: function () {
$('input[type=date]').datepicker({
dateFormat: 'yy-mm-dd'
});
}
});
</script>
Используя Modernizr для обнаружения функций HTML5 и обеспечения резервных копий
Ответ 3
Вы можете просто удалить тип "date"
и переключить его на "text"
, как в следующем скрипте:
удачи
jsfiddle
removeDefaultDate = function(){
$('input[type=date]').each(function(){
this.type="text";
});
$('input[type=date]').datepicker({dateFormat: 'yy-mm-dd'});
}
Ответ 4
У меня была аналогичная проблема. В моей модели /viewmodel я указал тип данных как DataType.Date
Я заметил, что когда я удалил это, сборщик дат начал работать в Chrome.
Я думаю, что попытался изменить тип данных как DataType.DateTime и снова попытался в chrome. Это решило проблему. Не уверен, что это относится ко всем, но это вызвало у меня много головной боли, поэтому это может помочь кому-то.
Это работало в MVC4 с использованием jqueryUI 1.8.20
Ответ 5
Он то, что я обычно использую. У меня есть несколько различных форматов используемого datepicker, поэтому я не использую его для всех входов даты. Однако изменение селектора на то, что лучше всего подходит вам.
<script src="{YourPathHere}modernizr.js"></script>
<script>
$(function () {//DOM ready code
if (!Modernizr.inputtypes.date) {// Check to see if HTML5 is supported to use EF data annotations, if not use jQuery datepicker
$('.date-picker').datepicker(
{
showButtonPanel: true,
gotoCurrent: true,
changeMonth: true,
changeYear: true,
showAnim: 'slideDown'
}
);
}
});// END DOM Ready
</script>
Ответ 6
Google предложил другой способ разрешения этого конфликта, который я нашел полезным, в нижней части этого поста.
var isDateInputSupported = function(){
var elem = document.createElement('input');
elem.setAttribute('type','date');
elem.value = 'foo';
return (elem.type == 'date' && elem.value != 'foo');
}
if (!isDateInputSupported()) // or.. !Modernizr.inputtypes.date
$('input[type="date"]').datepicker();