Проверка поддержки <input type='date'> в браузере: решение
Быстрый ответ
Для проверки поддержки типа 'date' элемента <input>
, вам потребуется создать новый элемент и назначить ему тип 'date'. С использованием JavaScript можно узнать, сохранил ли элемент назначенный ему тип. Если тип поменялся на 'text', значит, браузер не поддерживает 'date'. Вот соответствующий код:
var input = document.createElement('input');
input.type = 'date';
if (input.type === 'date') {
// Успех! Браузер поддерживает 'date'
} else {
// Провал. Поддержки 'date' нет
}
Отслеживание свойства input.type
позволяет надёжно определить поддержку функции.
Расшифровка секретного кода: Расширенная проверка функциональности
Если вы сомневаетесь в точности реализации, проведите ее проверку. Задайте элементу неверное значение и увидьте, как на это отреагирует браузер:
var input = document.createElement('input');
input.setAttribute('type', 'date');
input.setAttribute('value', 'not-a-date');
if (input.value !== 'not-a-date') {
// Поддержка уже установлена, браузер обработал недопустимое значение
} else {
// Поддержки нет, значение осталось некорректным
}
Задавая искусственные данные и проверяя их обработку, можно достоверно судить о наличии поддержки.
Мы верим в оптимальное поведение
Так же, как происходит с задержками в доставке, иногда браузеры могут утверждать что поддерживают 'date', но в процессе использования могут возникнуть ошибки. Нам не достаточно только слов, нужно убедиться в правильности функционирования на практике:
- Заявление о поддержке 'date' — это только начало. Проверяем на практике.
- Используйте неверные значения для проверки корректности реакции браузера.
- Проверьте различные аспекты, такие как атрибуты
min
,max
иstep
.
Если дверь не открывается, ищем другие пути: Разработка альтернативных решений
Если браузер не поддерживает элементы ввода 'date', мы разработаем запасной вариант. Например, библиотека jQuery UI Datepicker предложит пользователю удобный интерфейс для выбора даты:
if (input.type !== 'date') {
// Активируем jQuery UI Datepicker
$(input).datepicker();
}
Альтернативное решение активируется только если основной метод неуспешен, и надежно справляется с задачей.
Поиск функциональности
Вместо опоры на версию браузера, мы используем подход, основанный на проверке наличия функциональности, оставаясь готовыми к будущим изменениям:
- Проверка наличия функций важнее предположения о поддержке.
- Функциональные тесты гарантируют качество вашей работы.
- Обнаружение возможностей начинается с момента готовности документа или загрузки страницы.
Визуализация
Можно представить <input type='date'>
как "трюк", который браузер способен выполнить, а JavaScript — как способ проверить это:
Старый браузер: ❌ (Придерживается старых методов)
<input type="text"> // Ах да, помню времена, когда даты надо было вводить вручную...
Современный браузер: ✅ (Овладел новыми фокусами)
<input type="date"> // Посмотрите, теперь я умею вводить даты автоматически!
На JavaScript будет проведена проверка браузера на выполнение этого "трюка":
if (document.createElement('input').type === 'date') {
console.log('👍'); // Браузер умеет делать трюк!
} else {
console.log('👎'); // Видимо, старые методы все-таки недурны
}
В стремлении к универсальному пользовательскому опыту
Если браузер не поддерживает <input type='date'>
, мы демонстрируем свою компетенцию:
- Определите есть поддержка типа 'date' или нет.
- Реализуйте надёжное обнаружение функциональности.
- Подготовьте альтернативные варианты, например, jQuery UI Datepicker, чтобы избежать ошибок.
- Применяйте "заплату" только при необходимости, обеспечивая высокую производительность.
- Оставайтесь в курсе обновлений браузеров, чтобы поддерживать актуальность вашего приложения.
Полезные материалы
- Can I use... Support tables for HTML5, CSS3, etc — Обзор поддержки типа элемента ввода даты в HTML5.
- MDN Веб-документация: Типы input — Обзор различных типов
<input>
. - Обнаружение функций HTML5 – Погружение в HTML5 — Углубление в технику обнаружения поддержки типов ввода HTML5.
- HTML Стандарт — Официальный стандарт для типа ввода 'date'.
- GitHub – Modernizr/Modernizr — Инструмент обнаружения возможностей HTML5 и CSS3.
- Stack Overflow: Как проверить поддержку input type date браузером — Обсуждение и советы сообщества разработчиков по определению поддержки функций.
- GitHub – jonstipe/date-polyfill — Полифилл для обеспечения поддержки ввода дат в браузерах, не предоставляющих такой функциональности.