Як отримати тип введення HTML 5 = “дата”, що працює у Firefox та / або IE 10


191

Мені здається дивним, що input type="date"все ще не підтримується у Firefox після всього цього часу. Насправді, я не думаю, що вони додали багато (якщо вони є) нових типів HTML 5 у вхідному елементі. Не здивований, що він не підтримується в IE10. Отже, моє запитання ...

Як type="date"увімкнути inputелемент, що працює, не додаючи ще один .js-файл (а саме jQueryUIвіджет DatePicker), просто отримати календар / дату лише для браузерів IE та Firefox? Чи є щось там, що можна застосувати десь (можливо, CDN?), Що змусить цю функціональність працювати за замовчуванням у браузерах Firefox та / або IE ?? Намагаючись націлити на браузери IE 8+ та Firefox, не має значення, найновіша версія (28.0) буде добре.

ОНОВЛЕННЯ: Firefox 57+ підтримує тип введення = дата


29
Мені здається смішним, що Firefox все ще не підтримує цього. Я сьогодні перейшов з Chrome на Firefox сьогодні, лише на день / тиждень, щоб побачити, що відбувається в ці дні, і це одразу змусило мене повернутися назад!
Codemonkey

19
його жарт FF не підтримує дату
SuperUberDuper

6
Ось чому я переживаю, коли люди кажуть, що Firefox - найкращий браузер.
Мартін Браун

1
Хоча це і не поліфіл, я щойно застосував пікадай, який є простим js lib без jquery чи інших залежностей ...
mb21

2
Здається, це працює за замовчуванням у Firefox 57. Все ж!
Антуан Пінсар

Відповіді:


138

Ви можете спробувати веб- пам’яті , яка доступна на 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" />

Якщо конфігурація за замовчуванням не задовольняє, існує багато способів її налаштувати . Тут ви знайдете конфігуратор вибору дат .

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


це приємне рішення, конфігурація багата, але я не можу знайти, де встановити формат дати, наприклад "РРРР / ММ / ДД"
Павло Нієдоба,

14
Я отримую помилку "доступ заборонено", коли я намагаюся запустити цю jsfiddle в IE 11, і вибір дати не працює.
Шавай

4
Це не працює на IE10 ... я отримую ту ж помилку, яку згадував @Shavais ..., щоб змусити її працювати оновити версію jquery до 1.11 або вище. Спробуйте це посилання
Нітін,

2
На жаль, підтримка веб-сайтів для майбутнього Jquery 3 не буде здійснена, про що повідомляється на сайті автора. Будучи таким, я б покладався на добрий і старий інтерфейс Jquery.
подружжя

1
Це безумовно працює у firefox. Але не працювали в IE
Varuni NR

27

Він знаходиться у Firefox з версії 51 (26 січня 2017 року), але він не активований за замовчуванням (поки що)

Щоб активувати його:

about: конфігурація

dom.forms.datetime -> встановлено значення true

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


Радий почути це. Повинна бути включена за замовчуванням imo. Але це добре знати.
Соломон Клоссон

Я перебуваю на FF 64.0.2, але хоча ця опція "true" (увімкнена) вона не працює, поле для дати все ще є лише текстом. Я намагаюся також включити "timepicker" також без успіху.
Wasted_Coder

20

Існує простий спосіб позбутися цього обмеження, використовуючи компонент datePicker, наданий jQuery.

  1. Включити бібліотеки інтерфейсу jQuery та jQuery (я все ще використовую стару)

    • 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 - за потреби змініть формат дати .


8
ОП каже: "працює без додавання ще одного .s-файлу (а саме jQueryUI DatePicker Widget)" ... але це питання є найкращим хітом 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

Тип = "дата" не є фактичною специфікацією на даний момент. Це концепція, яку Google придумав, і міститься в їх специфікаціях Whatwg (не є офіційними) і підтримується Chrome лише частково.

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

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


138
Я не згоден, браузери повинні бути досить розумними, щоб зрозуміти це. Я дійсно втомився від вибору дат для вибору дат і постійно їх оновлювати.
SuperUberDuper

49
Дивні міркування. Занадто великий тягар для браузерів, але не для веб-розробника Joe?!?
jeroenh

35
Зараз це частина робочого проекту HTML 5: w3.org/html/wg/drafts/html/master/…
Кріс,

7
Я теж радий кожному новому типу введення. Вони краще визначені та рідні, що зазвичай означає швидкий.
Томаш Зато - Відновити Моніку

5
@MM Дякую HTML 5 тим часом було оновлено до офіційної рекомендації W3C. Нове посилання - w3.org/TR/2014/REC-html5-20141028/…
Кріс

9

Ось повний приклад з датою, відформатованою у РРРР-ММ-DD

<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" />

1
Хтось знає, чи дозволяє це також можливість вибору часу?
drooh

Я спробував ваш сценарій у JSFiddle @Drooh, але він не працює. Кожен раз, коли я вибираю дату, вона з’являється як мілісекунда у полі введення, а потім зникає. Чи може хтось надати робочій версії скрипта з конфігурацією дат / дд / мм / рр. Р.?
Ryan Coolwebs

Зауважимо, станом на серпень 2016 року, webshim не працює з jQuery 3, і в моєму тестуванні він також не працює з 2.2.4.
drooh

Я знайшов , що це буде найкращим рішенням доти , поки Firefox додає дата введення stackoverflow.com/questions/2528706 / ...
drooh

4

Хоча це не дозволяє отримати інтерфейс для вибору дати, 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 значно відстає від включення цього.


1
чи є версія для "часу"?
Малькольм Сальвадор

1
Розгорніть на цьому прикладі. Це атрибут html для введення?
Wasted_Coder

3

Це лише пропозиція, яка відповідає відповіді Дакса. (Я б сказав це у коментарі до цієї відповіді, але у мене ще недостатньо репутації, щоб коментувати інші питання).

Ідентифікатори повинні бути унікальними для кожного поля, тому, якщо у вашій формі (або формах) є кілька полів дати, ви можете використовувати елемент класу замість ідентифікатора:

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

і ваш внесок як:

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

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


3

Остання версія firefox the firefox 57 (Quantum) підтримує дату та інші функції, вона вийшла 14 листопада 2017 року. Ви можете завантажити її, натиснувши це посилання


0

Дякую Олександру, я знайшов спосіб змінити формат для en lang. (Не знав, який язик використовує такий формат)

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

 $.webshims.activeLang('en');

Я думаю, що єдиною країною, яка використовує цей формат, є Канада. У будь-якому випадку, "en" є неоднозначним, оскільки він включає також Сполучені Штати, які мають "особливий" формат дати в значній мірі.
Майкл Шепер

У моєму випадку мова йде про переосмислення формату дати для будь-якого локального клієнта, який може відрізнятися на клієнтських робочих станціях. Однак на одній конкретній сторінці я хочу використовувати цей формат дати (з причини вставки копії). Це більше схоже на коментар до відповіді Олександра Фаркаса, але я ставлю як окрему відповідь, тому що я не можу вставити код у коментарі. Я використовую це у виробничих умовах більше року.
Павло Нієдоба

Будь обережний. Якщо Webshims покладається на інтерпретацію мови в браузері, у вас можуть виникнути непередбачувані результати. "en", ймовірно, не означатиме однаковий формат на різних платформах (залежно від локальної системи) або навіть у різних браузерах. Це може бути інтерпретовано браузером у Канаді як "en-ca" (який, швидше за все, "yyyy-mm-dd", але, можливо, не відповідає), але "вхід" браузером в Індії (який, як і більшість країн світу) , вироблять бд-мм-рр-р). Тільки тому, що це у виробничому коді, не означає, що він перевірений належним чином - у виробничому коді існує багато помилок i18n, навіть на великих сайтах.
Майкл Шепер

Останній рядок $ .webshims.activeLang ('en'); слід змусити lang (або locale) веб-сайтам, що переважають налаштування браузера, тому формат завжди однаковий.
Павло Нієдоба

0

Іноді ви не хочете використовувати Datepicker http://jqueryui.com/datepicker/ в проекті , тому що:

  • Ви не хочете використовувати jquery
  • Конфлікт версій jquery у вашому проекті
  • Вибір року не зручний. Наприклад, вам потрібно 120 натискань на кнопку prev, щоб перейти до 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>


3
Цей код повністю не працює. Я не можу ввести дату, оскільки в полі вже заповнене "YYY-MM-DD", і якщо я спробую очистити його, воно з’явиться знову.
Stephen R

Будь ласка, не видаляйте дефіси. Я успішно пройшов тестування в Windows 10 Google Chrome 52, Firefox 41, Opera 39, Microsoft Edge, IE 11. Будь ласка, повідомте мені про свій пристрій, ОС та браузер.
Андрій

Я фактично просто натискаю на посилання "Виконати фрагмент коду" трохи нижче вашого коментаря. Я не можу правильно ввести дату, оскільки заповнювач "YYYY-MM-DD" активно конкурує зі мною, а не зникає, коли я починаю вводити текст. Я використовую останню Firefox у Windows 10.
Stephen R

1
не відповідає на запитання, оскільки порушує умову не додавання зовнішніх файлів JS, а власне сам код абсолютно неінтуїтивний у використанні. примушує ISO-формат для людей, навіть коли його не рідний формат дати, не може вводити свіжу дату, оскільки маска введення знову з’являється, не може надрукувати маску введення, оскільки це не маска, а фактичний текст у полі, маска повинна видалити як ти вводиш. не в кращому випадку, ніж стандартний вхід з перевіркою регулярних
виразів



-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>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.