Я работаю с атрибутами ввода элементов HTML5, и только Google Chrome поддерживает атрибуты даты и времени. Я пробовал Modernizr, но не могу понять, как интегрировать его на свой веб-сайт (как его кодировать / каков синтаксис / включает). Любой фрагмент кода о том, как работать с атрибутами даты и времени для всех браузеров.
javascript
jquery
html
jquery-ui
леонар разработчик
источник
источник
Ответы:
Любой браузер, который не поддерживает тип ввода
date
, по умолчанию будет использовать стандартный тип, то естьtext
все, что вам нужно сделать, это проверить свойство типа (а не атрибут) , если это не такdate
, ввод даты не поддерживается браузером, и вы добавляете свой собственный datepicker:if ( $('[type="date"]').prop('type') != 'date' ) { $('[type="date"]').datepicker(); }
FIDDLE
Вы, конечно, можете использовать любой datepicker, который хотите, datepicker jQuery UI, вероятно, наиболее часто используемый, но он добавляет довольно много javascript, если вы не используете библиотеку UI для чего-либо еще, но есть сотни альтернативных datepicker выбирать из.
type
Атрибут никогда не меняется, браузер будет только падать обратно по умолчаниюtext
типа для свойства, поэтому нужно проверить свойство.Атрибут по-прежнему можно использовать в качестве селектора, как в примере выше.
источник
$('input').prop('type') != 'date'
Modernizr фактически ничего не меняет в том, как обрабатываются новые типы ввода HTML5. Это функция детектора , а не прокладка (за исключением
<header>
,<article>
и т.д., которые он Проставки быть обработаны в качестве блочных элементов , аналогичных<div>
).Чтобы использовать
<input type='date'>
, вам нужно будет проверитьModernizr.inputtypes.date
свой собственный скрипт, и если он неверен, включите другой плагин, который предоставляет селектор даты. У вас есть тысячи на выбор; Modernizr поддерживает неполный список полифилов , с которых можно начать. В качестве альтернативы вы можете просто отпустить - все браузеры возвращаются к использованию,text
когда им предоставляется тип ввода, который они не распознают, поэтому худшее, что может случиться, - это то, что ваш пользователь должен ввести дату. (Вы можете дать им заполнитель или использовать что-то вроде jQuery.maskedinput, чтобы держать их в курсе.)источник
Вы просили пример Modernizr, так что готово. Этот код использует Modernizr, чтобы определить, поддерживается ли тип ввода «дата». Если он не поддерживается, он не возвращается к JQueryUI datepicker.
Примечание. Вам нужно будет загрузить JQueryUI и, возможно, изменить пути к файлам CSS и JS в вашем собственном коде.
<!DOCTYPE html> <html> <head> <title>Modernizer Detect 'date' input type</title> <link rel="stylesheet" type="text/css" href="jquery-ui-1.10.3/themes/base/jquery.ui.all.css"/> <script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/modernizr/modernizr-1.7-development-only.js"></script> <script type="text/javascript" src="http://code.jquery.com/jquery-1.10.2.min.js"></script> <script type="text/javascript" src="jquery-ui-1.10.3/ui/jquery.ui.core.js"></script> <script type="text/javascript" src="jquery-ui-1.10.3/ui/jquery.ui.widget.js"></script> <script type="text/javascript" src="jquery-ui-1.10.3/ui/jquery.ui.datepicker.js"></script> <script type="text/javascript"> $(function(){ if(!Modernizr.inputtypes.date) { console.log("The 'date' input type is not supported, so using JQueryUI datepicker instead."); $("#theDate").datepicker(); } }); </script> </head> <body> <form> <input id="theDate" type="date"/> </form> </body> </html>
Надеюсь, это сработает для вас.
источник
<script> var datefield = document.createElement("input") datefield.setAttribute("type", "date") if (datefield.type != "date") { // if browser doesn't support input type="date", load files for jQuery UI Date Picker document.write('<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="stylesheet" type="text/css" />\n') document.write('<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"><\/script>\n') document.write('<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"><\/script>\n') } </script> <script> if (datefield.type != "date") { // if browser doesn't support input type="date", initialize date picker widget: jQuery(function($) { // on document.ready $('#birthday').datepicker(); }); <- missing semicolon } </script>
<body> <form> <b>Date of birth:</b> <input type="date" id="birthday" name="birthday" size="20"> <input type="button" value="Submit" name="B1"> </form> </body>
ИСТОЧНИК 1 И ИСТОЧНИК 2
источник
Это немного мнение, но мы добились большого успеха с WebShims . Он может полностью разрушиться при использовании jQuery datepicker, если родной недоступен. Демо здесь
источник
Просто используйте
<script src="modernizr.js"></script>
в<head>
разделе, и скрипт добавит классы, которые помогут вам разделить два случая: если он поддерживается текущим браузером или нет.Плюс следуйте ссылкам, размещенным в этой теме. Это поможет вам: дата типа ввода HTML5, цвет, поддержка диапазона в Firefox и Internet Explorer
источник
Chrome версии 50.0.2661.87 m не поддерживает формат мм-дд-гг при присвоении переменной. Он использует гг-мм-дд. IE и Firefox работают как положено.
источник
Лучшее простое и рабочее решение, которое я нашел, - это работа над следующими браузерами
Сафари
<!doctype html> <html> <head> <meta charset="utf-8"> <title>Untitled Document</title> </head> <body> <h2>Poly Filler Script for Date/Time</h2> <form method="post" action=""> <input type="date" /> <br/><br/> <input type="time" /> </form> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> <script src="http://cdn.jsdelivr.net/webshim/1.12.4/extras/modernizr-custom.js"></script> <script src="http://cdn.jsdelivr.net/webshim/1.12.4/polyfiller.js"></script> <script> webshims.setOptions('waitReady', false); webshims.setOptions('forms-ext', {type: 'date'}); webshims.setOptions('forms-ext', {type: 'time'}); webshims.polyfill('forms forms-ext'); </script> </body> </html>
источник
Решение с двумя сценариями (2019 г.):
Просто включите Better-Dom и Better-Dateinput-Polyfill в свой раздел скриптов.
Вот демонстрация:
http://chemerisuk.github.io/better-dateinput-polyfill/
источник
У меня были проблемы с этим, поддерживая формат UK dd / mm / yyyy, я изначально использовал ответ от adeneo https://stackoverflow.com/a/18021130/243905, но это не сработало в сафари для меня, поэтому изменилось на это, который, насколько я могу судить, работает повсеместно - с использованием jquery-ui datepicker, проверки jquery.
if ($('[type="date"]').prop('type') !== 'date') { //for reloading/displaying the ISO format back into input again var val = $('[type="date"]').each(function () { var val = $(this).val(); if (val !== undefined && val.indexOf('-') > 0) { var arr = val.split('-'); $(this).val(arr[2] + '/' + arr[1] + '/' + arr[0]); } }); //add in the datepicker $('[type="date"]').datepicker(datapickeroptions); //stops the invalid date when validated in safari jQuery.validator.methods["date"] = function (value, element) { var shortDateFormat = "dd/mm/yy"; var res = true; try { $.datepicker.parseDate(shortDateFormat, value); } catch (error) { res = false; } return res; } }
источник
источник