С технической точки зрения они совершенно разные. <datalist>
- абстрактный контейнер опций для других элементов. В вашем случае вы использовали его с <input type="text"
, но вы также можете использовать его с диапазонами, цветами, датами и т. Д. http://demo.agektmr.com/datalist/
Если использовать его с вводом текста в качестве типа автозаполнения, тогда возникает вопрос: лучше ли использовать ввод текста в произвольной форме или заранее определенный список параметров? В этом случае я думаю, что ответ немного более очевиден.
Если мы сконцентрируемся на использовании <datalist>
в качестве списка опций для текстового поля, то вот некоторые конкретные различия между ним и полем выбора:
- A
<datalist>
содержит одну строку для отображения метки и отправки. Поле выбора может иметь другое значение отправки и метку дисплея <option value='ie'>Internet Explorer</option>
.
- A
<datalist>
не поддерживает тег <optgroup>
для организации отображения.
- Вы не можете ограничить пользователя списком параметров в
<datalist>
, как вы можете в <select>
.
- Событие onchange работает иначе. Для элемента
<select>
событие onchange вызывается сразу после изменения, тогда как для <input type="text"
событие вызывается после того, как элемент теряет фокус или пользователь нажимает клавишу ввода.
<datalist>
имеет пятнистую поддержку во всех браузерах. Способ отображения всех доступных опций несовместим, и от этого дела только ухудшаются.
Последний пункт, на мой взгляд, действительно важный. Поскольку у вас будет более универсальный запасной вариант автозаполнения, у вас почти нет причин настраивать <datalist>
. Плюс любое приличное включение автозаполнения позволит стилизовать отображение ваших опций, чего не делает <datalist>
. Если бы <datalist>
принял <li>
элементов, которыми вы могли бы манипулировать так, как вам хочется, это было бы действительно здорово! Но нет.
Также, насколько я могу судить, поиск <datalist>
- это точное совпадение с начала строки. Так что, если у вас было <option value="internet explorer">
и вы искали 'explorer', вы бы не получили результатов. Большинство плагинов автозаполнения будут искать в любом месте текста.
Я использовал <datalist>
только как быстрый и ленивый вспомогательный инструмент для некоторых внутренних страниц, где я со 100% уверенностью знаю, что пользователи имеют самые последние версии Chrome или Firefox, и не будет пытаться передавать поддельные значения. Для любого другого случая трудно рекомендовать использование <datalist>
из-за очень плохой поддержки браузера.