Мне было интересно, каковы различия между Select-Option и Datalist-Option. Есть ли ситуация, когда было бы лучше использовать ту или иную? Ниже приведен пример каждого из них:
Select-Option
<select name="browser">
<option value="firefox">Firefox</option>
<option value="ie">IE</option>
<option value="chrome">Chrome</option>
<option value="opera">Opera</option>
<option value="safari">Safari</option>
</select>
DataList-Опция
<input type=text list=browsers>
<datalist id=browsers>
<option value="Firefox">
<option value="IE">
<option value="Chrome">
<option value="Opera">
<option value="Safari">
</datalist>
Подумайте об этом как о различии между требованием и предложением. Для элемента select
пользователь должен выбрать один из параметров, которые вы указали. Для элемента datalist
предлагается выбрать один из параметров, который вы указали, но он может фактически ввести все, что захочет во вход.
Изменить 1: То, что вы используете, зависит от ваших требований. Если пользователь должен ввести один из ваших вариантов, используйте элемент select
. Если использование может ввести что-либо, используйте элемент datalist
.
Изменить 2: нашел этот лакомый кусочек в уровне жизни HTML: "Каждый элемент элемента, являющийся потомком элемента datalist... представляет собой предложение".
С технической точки зрения они совершенно разные. <datalist>
- абстрактный контейнер опций для других элементов. В вашем случае вы использовали его с <input type="text"
, но вы также можете использовать его с диапазонами, цветами, датами и т.д. http://demo.agektmr.com/datalist/
Если вы используете его с текстовым вводом, как тип автозаполнения, то на самом деле возникает вопрос: лучше ли использовать текстовый ввод свободной формы или заданный список параметров? В этом случае я думаю, что ответ немного более очевиден.
Если мы сосредоточимся на использовании <datalist>
в качестве списка параметров для текстового поля, то вот некоторые конкретные различия между этим и поле выбора:
<datalist>
имеет одну строку для обеих ярлыков отображения и отправки. В поле выбора может быть другое значение отправки или отображаемая метка <option value='ie'>Internet Explorer</option>
.<datalist>
не поддерживает группы параметров для организации отображения.<datalist>
, как вы можете, с помощью <select>
.<select>
событие onchange запускается сразу после изменения, тогда как при <input type="text"
событие запускается после того, как элемент теряет фокус или нажимает пользователь.<datalist>
имеет действительно пятнистую поддержку в браузерах. Способ показать все доступные варианты несовместим, и оттуда ситуация ухудшается.Последний вопрос действительно большой, на мой взгляд. Поскольку у вас будет более универсальный резерв автозаполнения, тогда почти нет причин для решения проблемы настройки <datalist>
. Кроме того, любой достойный автозаполняющий модуль позволяет использовать стиль для отображения ваших опций, которые <datalist>
не выполняет. Если <datalist>
принял <li>
элементы, которые вы могли бы манипулировать, как хотите, это было бы здорово! Но НЕТ.
Кроме того, насколько я могу судить, поиск <datalist>
является точным совпадением от начала строки. Поэтому, если у вас есть <option value="internet explorer">
, и вы искали "explorer", вы не получили бы никаких результатов. Большинство плагинов автозаполнения будут искать в любом месте текста.
Я использовал <datalist>
как быстрый и ленивый помощник по удобству для некоторых внутренних страниц, где я знаю с 100% уверенностью, что у пользователей самый последний Chrome или Firefox, и не будет пытаться представить фиктивные значения. В любом другом случае трудно рекомендовать использование <datalist>
из-за очень плохой поддержки браузера.
Существует еще одно важное различие между select
и datalist
.
Здесь приведен коэффициент поддержки браузера.
выбор широко поддерживается браузерами по сравнению с datalist. Пожалуйста, взгляните на эту страницу для полной поддержки браузера datalist -
Где в качестве выбора поддерживается эффективно все браузеры (с IE6 +, Firefox 2+, Chrome 1+ и т.д.)
Datalist включает автозаполнение и предложения изначально, он также может позволить пользователю вводить значение, которое не определено в предложениях.
Выберите только предложения.
Чтобы конкретно ответить на часть вашего вопроса "Есть ли ситуации, в которой было бы лучше использовать ту или иную?", рассмотрите форму с повторяющимися разделами. Если повторяющийся раздел содержит много тегов select
, тогда option
должен отображаться для каждого выбора для каждой строки.
В таком случае я бы подумал использовать datalist
с input
, потому что тот же datalist
может использоваться для любого числа input
s. Это может потенциально сохранить большое количество времени рендеринга на сервере и будет масштабироваться намного лучше любого количества строк.
Я заметил, что в datalist нет выбранной функции. Он дает вам только выбор, но не может иметь параметр по умолчанию. Вы также не можете показать выбранную опцию на следующей странице.
Список данных - это новый тег HTML в поддерживаемых HTML5 браузерах. Он отображается как текстовое поле с некоторым списком параметров. Для примера для поля "Текстовое поле" он будет давать вам варианты "Мужчины", когда вы вводите "M" или "F" в текстовом поле.
<input list="Gender">
<datalist id="Gender">
<option value="Male">
<option value="Female>
</datalist>
Его похоже на select, но у datalist есть дополнительные функции, такие как auto suggest. Вы даже можете вводить и видеть предложения по мере ввода.
Пользователь также сможет писать элементы, которых нет в списке.
option
в datalist-option? Возвышенное, кажется, хочет