Как получить тип ввода HTML 5 = «дата», работающий в Firefox и / или IE 10

191

Я нахожу странным, что input type="date"по-прежнему не поддерживается в Firefox все это время. На самом деле, я не думаю, что они добавили много (если таковые имеются) новых типов HTML 5 в элемент ввода. Не удивлен, что он не поддерживается в IE10. Итак, мой вопрос ...

Как получить type="date"на inputэлемент работы без добавления, еще один, .js файл (а именно jQueryUIDatePicker Widget) только , чтобы получить календарь / дату только IE и Firefox браузеров? Есть ли что-то, что может быть применено где-нибудь (возможно, CDN?), Которое заставит эту функциональность работать по умолчанию в Firefox и / или браузерах IE ?? Попытка нацелиться на браузеры IE 8+ и на Firefox, не имеет значения, последняя версия (28.0) будет в порядке.

ОБНОВЛЕНИЕ: Firefox 57+ поддерживает тип ввода = дата

Соломон Клоссон
источник
29
Мне кажется смешным, что Firefox все еще не поддерживает это. Сегодня я переключился с Chrome на Firefox, всего на день / неделю, чтобы посмотреть, что к чему в эти дни, и это немедленно заставило меня захотеть вернуться назад!
Codemonkey
19
это шутка FF не поставил дату
SuperUberDuper
6
Вот почему я расстраиваюсь, когда люди говорят, что Firefox - лучший браузер.
Мартин Браун
1
Хотя я и не являлся полифилом, я просто использовал pickaday, который представляет собой простую библиотеку js без jquery или других зависимостей ...
mb21
2
Кажется, работает по умолчанию в Firefox 57. Тем не менее!
Антуан Пинсард

Ответы:

138

Вы можете попробовать webshims , который доступен на cdn +, только загружает полифилл, если это необходимо.

Вот демоверсия с CDN: http://jsfiddle.net/trixta/BMEc9/

<!-- cdn for modernizr, if you haven't included it already -->
<script src="http://cdn.jsdelivr.net/webshim/1.12.4/extras/modernizr-custom.js"></script>
<!-- polyfiller file to detect and load polyfills -->
<script src="http://cdn.jsdelivr.net/webshim/1.12.4/polyfiller.js"></script>
<script>
  webshims.setOptions('waitReady', false);
  webshims.setOptions('forms-ext', {types: 'date'});
  webshims.polyfill('forms forms-ext');
</script>

<input type="date" />

Если конфигурация по умолчанию не удовлетворяет, есть много способов настроить ее. Здесь вы найдете конфигуратор DatePicker .

Примечание. Хотя в будущем могут появиться новые выпуски исправлений ошибок для веб-сайта. Больше не будет крупных релизов. Это включает в себя поддержку jQuery 3.0 или любых новых функций.

александр фаркас
источник
Это хорошее решение, конфигурация богата, но я не могу найти, где установить формат даты, например, «ГГГГ / ММ / ДД»
Павел Недоба
14
Я получаю сообщение об ошибке «Отказано в доступе», когда я пытаюсь запустить этот jsfiddle в IE 11, а средство выбора даты не работает.
Shavais
4
Это не работает на IE10 ... я получаю ту же ошибку, что и @Shavais ..., чтобы заставить ее работать, обновите версию jquery до 1.11 или выше .. попробуйте эту ссылку
Nitin
2
К сожалению, поддержка веб-сайтов для предстоящего Jquery 3 не будет осуществлена, как сообщается на сайте автора. В таком случае я бы положился на старый и добрый пользовательский интерфейс Jquery.
marionmaiden
1
Это определенно работает в Firefox. Но не работал в IE
Varuni NR
27

Он находится в Firefox начиная с версии 51 (26 января 2017 г.), но по умолчанию не активирован (пока)

Чтобы активировать его:

о: конфигурации

dom.forms.datetime -> установлено в true

https://developer.mozilla.org/en-US/Firefox/Experimental_features

Джонатан Ванасс
источник
Рад слышать это. Должен быть включен по умолчанию IMO. Но это хорошо знать.
Соломон Клоссон
Я на FF 64.0.2, но хотя эта опция "true" (включена), она не работает, поле datetime по-прежнему только текст. Я попытался включить «Timepicker», но безуспешно.
Wasted_Coder
20

Существует простой способ избавиться от этого ограничения с помощью компонента datePicker, предоставляемого jQuery.

  1. Включите библиотеки jQuery и jQuery UI (я все еще использую старую)

    • SRC = "JS / JQuery-1.7.2.js"
    • SRC = "JS / JQuery-UI-1.7.2.js"
  2. Используйте следующий фрагмент

    $(function() {
         $( "#id_of_the_component" ).datepicker({ dateFormat: 'yy-mm-dd'}); 
    });

См. JQuery UI DatePicker - при необходимости измените формат даты .

Dax
источник
8
OP говорит, что «работает без добавления, еще одного файла .js (а именно, виджета DatePicker jQueryUI)» ... но этот вопрос является главным хитом Google, поэтому ваш ответ по-прежнему ОЧЕНЬ полезен, хотя и не отвечает на вопрос. Хотелось бы, чтобы я не чувствовал себя плохо из-за того, что проголосовал за ваш пост
phil294
2
Вы должны включить jQuery UI CSS для правильного отображения календаря. <br> <link rel = "stylesheet" href = "// code.jquery.com/ui/1.12.0/themes/base/jquery-ui.css">
YuAn Shaolin Maculelê Lai
16

Type = "date" не является действительной спецификацией на данный момент. Это концепция, которую разработала Google и которая содержится в их спецификациях whatwg (не является официальной) и поддерживается только частично Chrome.

http://caniuse.com/#search=date

Я бы не стал полагаться на этот тип ввода на данный момент. Было бы неплохо иметь, но я не предвижу, что этот действительно сделает это. Причина № 1 в том, что браузер слишком обременителен, чтобы определить лучший интерфейс для довольно сложного ввода. Подумайте об этом с точки зрения отзывчивости. Как любой из поставщиков узнает, что будет лучше всего работать с вашим пользовательским интерфейсом, например, с шириной 400, 800 и 1200 пикселей?

Крис Лав
источник
138
Я не согласен, браузеры должны быть достаточно умными, чтобы понять это. Я действительно устал использовать сборщиков даты и постоянно обновлять их.
SuperUberDuper
49
Странные рассуждения. Слишком большая нагрузка для браузеров, но не для веб-разработчика Джо?!?
1938 года
35
Теперь это часть рабочего проекта HTML 5: w3.org/html/wg/drafts/html/master/…
Крис
7
Я тоже рад за каждый новый тип ввода. Они лучше определены, и родные, что обычно означает быстро.
Томаш Зато - Восстановить Монику
5
@ ММ Спасибо. Тем временем HTML 5 был обновлен до официальной рекомендации W3C. Новая ссылка w3.org/TR/2014/REC-html5-20141028/…
Крис
9

Вот полный пример с датой в формате ГГГГ-ММ-ДД

<script type="text/javascript" src="http://code.jquery.com/jquery-2.1.4.min.js"></script> 
<script src="//cdn.jsdelivr.net/webshim/1.14.5/polyfiller.js"></script>
<script>
webshims.setOptions('forms-ext', {types: 'date'});
webshims.polyfill('forms forms-ext');
$.webshims.formcfg = {
en: {
    dFormat: '-',
    dateSigns: '-',
    patterns: {
        d: "yy-mm-dd"
    }
}
};
</script>
<input type="date" />
drooh
источник
1
Кто-нибудь знает, позволяет ли это добавить опцию выбора времени?
drooh
Я попробовал ваш скрипт в JSFiddle @Drooh, но он не работает. Каждый раз, когда я выбираю дату, она появляется на миллисекунду в поле ввода и затем исчезает. Может кто-нибудь предоставить рабочую версию скрипки с конфигурацией даты дд / мм / гггг?
Райан Coolwebs
Обратите внимание, что по состоянию на август 2016 года webshim не работает с jQuery 3, и в моем тестировании он также не работает с 2.2.4.
drooh
Я считаю, что это лучшее решение, пока Firefox не добавит ввод даты stackoverflow.com/questions/2528706/…
drooh
4

Хотя это не позволяет вам получить пользовательский интерфейс datepicker, Mozilla разрешает использование шаблона, так что вы можете по крайней мере получить подтверждение даты с помощью чего-то вроде этого:

pattern='(?:19|20)[0-9]{2}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-9])|(?:(?!02)(?:0[1-9]|1[0-2])-(?:30))|(?:(?:0[13578]|1[02])-31))'

В конечном счете, я согласен с @SuperUberDuper в том, что Mozilla значительно отстала от этого.

ajax1515
источник
1
есть версия для "времени"?
Малкольм Сальвадор
1
Пожалуйста, расширьте этот пример. Это атрибут html для ввода?
Wasted_Coder
3

Это всего лишь предположение, которое следует за ответом Дакса. (Я бы добавил это в комментарии к этому ответу, но у меня пока недостаточно репутации, чтобы комментировать другие вопросы).

Идентификаторы должны быть уникальными для каждого поля, поэтому, если у вас есть несколько полей даты в вашей форме (или формах), вы можете использовать элемент class вместо идентификатора:

 $(function() { $( ".datepicker" ).datepicker({ dateFormat: 'yy-mm-dd' }); });

и ваш вклад как:

 <input type="text" class="datepicker" name="your-name" />

Теперь, каждый раз, когда вам нужен выбор даты, просто добавьте этот класс. PS Я знаю, вы все равно должны использовать js :(, но, по крайней мере, вы настроены для всего вашего сайта. Мои 2 цента ...

codeispoetry
источник
3

Последняя версия firefox the firefox 57 (Quantum) поддерживает дату и другие функции, выпущенные 14 ноября 2017 года. Вы можете скачать ее, перейдя по этой ссылке

irfandar
источник
0

Спасибо Александр, я нашел способ, как изменить формат для en lang. (Не знал, какой язык использует такой формат)

 $.webshims.formcfg = {
        en: {
            dFormat: '/',
            dateSigns: '/',
            patterns: {
                d: "yy/mm/dd"
            }
        }
     };

 $.webshims.activeLang('en');
Павел Недоба
источник
Я думаю, что единственная страна, которая использует этот формат, это Канада. В любом случае, «en» является неоднозначным, потому что он также включает в себя Соединенные Штаты, которые имеют «особый» формат даты в значительной степени свой собственный.
Майкл Шепер
В моем случае речь идет о переопределении формата даты для любого языка клиента, который может отличаться на клиентских рабочих станциях. Однако на одной конкретной странице я хочу использовать этот формат даты (по причине копирования-вставки). Это больше похоже на комментарий к ответу Александра Фаркаша, но я добавляю отдельный ответ, потому что не могу вставить код в комментарий. Я использую это в производственной среде больше года.
Павел Недоба
Быть осторожен. Если Webshims полагается на интерпретацию локали браузером, вы можете получить непредсказуемые результаты. «en», вероятно, не будет означать один и тот же формат на разных платформах (в зависимости от локали системы) или даже в разных браузерах. Он может быть интерпретирован как «en-ca» браузером в Канаде (что наиболее вероятно yyyy-mm-dd, но, возможно, не соответствует), но «en-in» браузером в Индии (который, как и большинство стран мира) , будет производить дд-мм-гггг). Тот факт, что он находится в рабочем коде, не означает, что он был должным образом протестирован - в рабочем коде существует множество ошибок i18n, даже на больших сайтах.
Майкл Шепер
Последняя строка $ .webshims.activeLang ('en'); должен заставить lang (или locale) переопределять веб-настройки браузера, поэтому формат всегда один и тот же.
Павел Недоба
0

Иногда вы не хотите использовать Datepicker http://jqueryui.com/datepicker/ в вашем проекте, потому что:

  • Вы не хотите использовать JQuery
  • Конфликт версий jquery в вашем проекте
  • Выбор года не удобен. Например, вам нужно 120 нажатий на кнопку «Предыдущая», чтобы перейти на 10 лет назад.

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

<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>Input Key Filter Test</title>
	<meta name="author" content="Andrej Hristoliubov anhr@mail.ru">
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
	
	<!-- For compatibility of IE browser with audio element in the beep() function.
	https://www.modern.ie/en-us/performance/how-to-use-x-ua-compatible -->
	<meta http-equiv="X-UA-Compatible" content="IE=9"/>
	
	<link rel="stylesheet" href="https://rawgit.com/anhr/InputKeyFilter/master/InputKeyFilter.css" type="text/css">		
	<script type="text/javascript" src="https://rawgit.com/anhr/InputKeyFilter/master/Common.js"></script>
	<script type="text/javascript" src="https://rawgit.com/anhr/InputKeyFilter/master/InputKeyFilter.js"></script>
	
</head>
<body>
	<h1>Date field</h1>
    Date:
    <input type='date' id='date' />
    New date: <span id="NewDate"></span>
    <script>
        CreateDateFilter('date', {
                formatMessage: 'Please type date %s'
                , onblur: function (target) {
                    if (target.value == target.defaultValue)
                        return;
                    document.getElementById('NewDate').innerHTML = target.value;
                }
                , min: new Date((new Date().getFullYear() - 10).toString()).toISOString().match(/^(.*)T.*$/i)[1]//'2006-06-27'//10 years ago
                , max: new Date().toISOString().match(/^(.*)T.*$/i)[1]//"2016-06-27" //Current date
                , dateLimitMessage: 'Please type date between "%min" and "%max"'
            }
        );
    </script>

</body>
</html>

Andrej
источник
3
Этот код полностью терпит неудачу. Я не могу ввести дату, потому что поле уже заполнено "YYY-MM-DD", и если я попытаюсь очистить его, оно появится снова.
Стивен Р.
Пожалуйста, не удаляйте дефисы. Я успешно протестировал в Windows 10 Google Chrome 52, Firefox 41, Opera 39, Microsoft Edge, IE 11. Пожалуйста, скажите мне ваше устройство, ОС и браузер.
Андрей
Я просто нажимаю на ссылку "Run Code Snippet" чуть ниже вашего комментария. Я не могу правильно ввести дату, потому что заполнитель "ГГГГ-ММ-ДД" активно конкурирует со мной, а не исчезает, когда я начинаю печатать. Я использую последний Firefox на Windows 10.
Стивен Р
1
не отвечает на вопрос, поскольку нарушает условие не добавлять внешние файлы JS, и фактически сам код совершенно не интуитивно понятен в использовании. навязывает людям формат ISO, даже если он не является родным форматом даты, не может вводить свежую дату, поскольку вновь появляется маска ввода, не может перезаписывать маску ввода, поскольку это не маска, а фактический текст в поле, необходимо удалить маску как Вы печатаете. не в любом случае лучше, чем стандартный ввод с проверкой регулярных выражений
MikeT
-1

Мне пришлось использовать bootstrap-datepickerплагин, чтобы календарь работал на Firefox 55 Portable:

https://bootstrap-datepicker.readthedocs.io/en/latest/

Совместим с Bootstrap v2 и v3. Он поставляется с отдельной таблицей стилей, поэтому вам не нужно зависеть от Bootstrap.

Использование:

<input class="datepicker">

$('.datepicker').datepicker({
    format: 'mm/dd/yyyy'
});
Сантьяго выходит так
источник
-2
<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>jQuery UI Datepicker - Default functionality</title>
  <link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
  <script src="//code.jquery.com/jquery-1.10.2.js"></script>
  <script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
  <link rel="stylesheet" href="/resources/demos/style.css">
  <script>
  $(function() {
    $( "#datepicker" ).datepicker();
  });
  </script>
</head>
<body>

<p>Date: <input type="text" id="datepicker"></p>


</body>
</html>
WAYSER
источник