Форма HTML: выбор-опция против опции-списка данных

92

Мне было интересно, каковы различия между 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>
  • 9
    Поскольку HTML5 специально говорит, что атрибуты без кавычек действительны: w3.org/TR/html-markup/syntax.html#syntax-attr-unquoted
  • 1
    Кто-нибудь знает, почему мы не закрываем тег option в datalist-option? Возвышенное, кажется, хочет
Показать ещё 3 комментария
Теги:
html-form
html-datalist
html-select

8 ответов

116
Лучший ответ

Подумайте об этом как о различии между требованием и предложением. Для элемента select пользователь должен выбрать один из параметров, которые вы указали. Для элемента datalist предлагается выбрать один из параметров, который вы указали, но он может фактически ввести все, что захочет во вход.

Изменить 1: То, что вы используете, зависит от ваших требований. Если пользователь должен ввести один из ваших вариантов, используйте элемент select. Если использование может ввести что-либо, используйте элемент datalist.

Изменить 2: нашел этот лакомый кусочек в уровне жизни HTML: "Каждый элемент элемента, являющийся потомком элемента datalist... представляет собой предложение".

  • 0
    Кроме того, он имеет в основном [частичную поддержку] (( caniuse.com/#feat=datalist ) в других браузерах, с ошибками, такими как длинные списки данных становятся не прокручиваемыми и т. Д.
41

С технической точки зрения они совершенно разные. <datalist> - абстрактный контейнер опций для других элементов. В вашем случае вы использовали его с <input type="text", но вы также можете использовать его с диапазонами, цветами, датами и т.д. http://demo.agektmr.com/datalist/

Если вы используете его с текстовым вводом, как тип автозаполнения, то на самом деле возникает вопрос: лучше ли использовать текстовый ввод свободной формы или заданный список параметров? В этом случае я думаю, что ответ немного более очевиден.

Если мы сосредоточимся на использовании <datalist> в качестве списка параметров для текстового поля, то вот некоторые конкретные различия между этим и поле выбора:

  • Текстовое поле с текстом <datalist> имеет одну строку для обеих ярлыков отображения и отправки. В поле выбора может быть другое значение отправки или отображаемая метка <option value='ie'>Internet Explorer</option>.
  • Текстовое поле < <datalist> не поддерживает группы параметров для организации отображения.
  • Вы не можете ограничить пользователя списком параметров в <datalist>, как вы можете, с помощью <select>.
  • Событие onchange работает по-разному. В элементе <select> событие onchange запускается сразу после изменения, тогда как при <input type="text" событие запускается после того, как элемент теряет фокус или нажимает пользователь.
  • <datalist> имеет действительно пятнистую поддержку в браузерах. Способ показать все доступные варианты несовместим, и оттуда ситуация ухудшается.

Последний вопрос действительно большой, на мой взгляд. Поскольку у вас будет более универсальный резерв автозаполнения, тогда почти нет причин для решения проблемы настройки <datalist>. Кроме того, любой достойный автозаполняющий модуль позволяет использовать стиль для отображения ваших опций, которые <datalist> не выполняет. Если <datalist> принял <li> элементы, которые вы могли бы манипулировать, как хотите, это было бы здорово! Но НЕТ.

Кроме того, насколько я могу судить, поиск <datalist> является точным совпадением от начала строки. Поэтому, если у вас есть <option value="internet explorer">, и вы искали "explorer", вы не получили бы никаких результатов. Большинство плагинов автозаполнения будут искать в любом месте текста.

Я использовал <datalist> как быстрый и ленивый помощник по удобству для некоторых внутренних страниц, где я знаю с 100% уверенностью, что у пользователей самый последний Chrome или Firefox, и не будет пытаться представить фиктивные значения. В любом другом случае трудно рекомендовать использование <datalist> из-за очень плохой поддержки браузера.

  • 1
    Отличный ответ !! Не могли бы вы объяснить вашу вторую пулю? Что вы подразумеваете под "группами опций для организации отображения"? Благодарю.
  • 0
    afaik (в 2019 году в Chrome и Firefox) <datalist> сопоставляет инфиксы (а не только префиксы). поэтому «печатая» re предлагает «Firefox» и «Internet Explorer».
Показать ещё 1 комментарий
1

Существует еще одно важное различие между select и datalist. Здесь приведен коэффициент поддержки браузера.

выбор широко поддерживается браузерами по сравнению с datalist. Пожалуйста, взгляните на эту страницу для полной поддержки браузера datalist -

Поддержка браузера Datalist

Где в качестве выбора поддерживается эффективно все браузеры (с IE6 +, Firefox 2+, Chrome 1+ и т.д.)

1

Datalist включает автозаполнение и предложения изначально, он также может позволить пользователю вводить значение, которое не определено в предложениях.

Выберите только предложения.

0

Чтобы конкретно ответить на часть вашего вопроса "Есть ли ситуации, в которой было бы лучше использовать ту или иную?", рассмотрите форму с повторяющимися разделами. Если повторяющийся раздел содержит много тегов select, тогда option должен отображаться для каждого выбора для каждой строки.

В таком случае я бы подумал использовать datalist с input, потому что тот же datalist может использоваться для любого числа input s. Это может потенциально сохранить большое количество времени рендеринга на сервере и будет масштабироваться намного лучше любого количества строк.

  • 0
    Если вы не будете беспокоиться о предоставлении пользователю опций на выбор, зачем использовать список данных? Просто используйте вместо этого текстовое поле.
0

Я заметил, что в datalist нет выбранной функции. Он дает вам только выбор, но не может иметь параметр по умолчанию. Вы также не можете показать выбранную опцию на следующей странице.

  • 0
    Эквивалентом для ввода данных плюс список данных будет установка значения = "(опция по умолчанию)" для самого ввода. Для ввода с type = "text" этот текст будет отображаться по умолчанию, но будет редактируемым.
0

Список данных - это новый тег HTML в поддерживаемых HTML5 браузерах. Он отображается как текстовое поле с некоторым списком параметров. Для примера для поля "Текстовое поле" он будет давать вам варианты "Мужчины", когда вы вводите "M" или "F" в текстовом поле.

<input list="Gender">
<datalist id="Gender">
  <option value="Male">
  <option value="Female> 
</datalist>
  • 3
    Это не отвечает на вопрос ..
  • 5
    Верно, но он дает одну приятную, новую информацию, а именно, что ввод первой буквы выберет соответствующие элементы в списке.
-2

Его похоже на select, но у datalist есть дополнительные функции, такие как auto suggest. Вы даже можете вводить и видеть предложения по мере ввода.

Пользователь также сможет писать элементы, которых нет в списке.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню