HTML-форма: Select-Option vs Datalist-Option


136

Мені було цікаво, чим відрізняються між Select-Option та Datalist-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>

Даталіст-Варіант

<input type=text list=browsers>
<datalist id=browsers>
  <option value="Firefox">
  <option value="IE">
  <option value="Chrome">
  <option value="Opera">
  <option value="Safari">
</datalist>

11
Оскільки HTML5 спеціально говорить про те, що атрибути без котирування є дійсними: w3.org/TR/html-markup/syntax.html#syntax-attr-unquoted
james.garriss

1
Хтось знає, чому ми не закриваємо optionтег у параметрі «даталіст»? Піднесений, схоже, хоче
Джонні Мец

1
@ johnny Metz Тег можна закрити, але він може бути самозакритим, ви також можете зробити щось на зразок цього: code <input list = "браузери" name = "браузер"> <datalist id = "браузери"> <value value = "firefox" > Firefox </option> <value value = "ie"> IE </option> <value value = "chrome"> Chrome </option> <value value = "opera"> Opera </option> <value value = " safari "> Safari </option> </datalist> codeРезультат дивний. Даталісти друкують значення у списку. Це значення потім стає значенням поля введення.
Сара М Джайлс

3
@JohnnyMetz, HTML 5 був частково реакцією проти XHTML. Для певних елементів, наприклад option, немає необхідності мати тег закриття або самозакриватися. HTML 5! = XHTML.
james.garriss

2
Специфікація говорить: "Початкові та кінцеві теги певних нормальних елементів можна опустити". Він також говорить: "Кінцевий тег елемента елемента може бути опущений, якщо за елементом параметра негайно слідує інший елемент опції, або якщо за ним негайно слідує елемент optgroup, або якщо в батьківському елементі немає більше вмісту." w3.org/TR/html/syntax.html#optional-tags
james.garriss

Відповіді:


180

Подумайте про це як про різницю між вимогою та пропозицією. Для selectелемента користувачеві потрібно вибрати один із заданих вами параметрів. Для datalistелемента пропонується користувачеві вибрати один із запропонованих вами параметрів, але він може насправді ввести все, що хоче, у вхід.

Редагувати 1: Отже, який ви використовуєте, залежить від ваших вимог. Якщо користувач повинен ввести один із ваших варіантів, використовуйте selectелемент. Якщо у використанні можна ввести що завгодно, використовуйте datalistелемент.

Редагувати 2: Знайдено цей лапок у HTML Living Standard : "Кожен елемент параметра, який є нащадком даталістичного елемента ... являє собою пропозицію."


Крім того, він має [часткову підтримку] (( caniuse.com/#feat=datalist ) в інших веб-переглядачах, коли такі помилки, як довгі даталісти, стають нерегульованими тощо.
Govind Rai,

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

66

З технічної точки зору вони зовсім інші. <datalist>є абстрактним контейнером варіантів для інших елементів. У вашому випадку ви використовували його, <input type="text"але ви також можете використовувати його з діапазонами, кольорами, датами тощо. Http://demo.agektmr.com/datalist/

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

Якщо ми зосередимось на використанні <datalist>в якості списку параметрів для текстового поля, то ось деякі конкретні відмінності між цим і полем вибору:

  • <datalist>Подаються текстове поле має один рядок , як для етикетки дисплея і натисніть кнопку. Поле вибору може мати інше значення подання та мітку відображення <option value='ie'>Internet Explorer</option>.
  • <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>через дуже погану підтримку браузера.


3
Відмінна відповідь !! Не могли б ви пояснити свою другу кулю? Що ви маєте на увазі під "групами опцій для організації показу"? Дякую.
Говінд Рай

afaik (у 2019 році на Chrome і Firefox) <datalist> відповідає інфіксам (не лише префіксам). тому "набравши" повторно "пропонує і" Firefox ", і" Internet Explorer ".
sam boosalis

@GovindRai Я побіжний пошук "елемента optgroup" повертає цю сторінку з завжди корисного MDN з додатковою інформацією (та прикладами): developer.mozilla.org/en-US/docs/Web/HTML/Element/optgroup
TylerH

Я перевіряв Firefox 66 та Chrome 73 - насправді етикетки даталістів відповідають будь-де, тому, наприклад, якщо ваш даталіст містить назви країн, "ted" відповідатиме "Сполучені Штати" та "Великобританія".
Błotosmętek

5

Datalist включає автозаповнення та пропозиції на самому собі, він також може дозволити користувачеві ввести значення, яке не визначене в пропозиціях.

Вибір дає лише попередньо визначені параметри, з яких користувач має обрати


2

Список даних - це новий тег HTML у веб-переглядачах, що підтримуються HTML5. Він відображається як текстове поле з деяким списком параметрів. Для прикладу для гендерного текстового поля він надасть вам параметри як Чоловік-самка, коли ви введете "M" або "F" у текстове поле.

<input list="Gender">
<datalist id="Gender">
  <option value="Male">
  <option value="Female> 
</datalist>

5
Щоправда, але це дає одну приємну, нову інформацію, а саме те, що набравши першу букву, виберіть відповідні елементи у списку.
james.garriss

1

Щоб конкретно відповісти на частину вашого питання "Чи є ситуація, в якій було б краще використовувати те чи інше?", Розгляньте форму з повторюваними розділами. Якщо розділ, що повторюється, містить багато selectтегів, то options повинен бути відображений для кожного вибору, для кожного рядка.

У такому випадку, я б розглянути можливість використання datalistз input, так само datalistможе бути використаний для будь-якого числа inputс. Це потенційно може зекономити велику кількість часу надання сервера та значно покращити будь-яку кількість рядків.


Якщо ви не збираєтеся турбуватися надавати користувачеві варіанти вибору, чому б не турбуватися з використанням даталіста? Просто використовуйте текстове поле замість цього.
james.garriss

0

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


Еквівалентом для введення плюс даталіста було б встановлення значення = "(параметр за замовчуванням)" на самому вході. Для введення з type = "text" цей текст з'явиться за замовчуванням, але може бути редагованим.
Bemisawa

0

Є ще одна важлива різниця між selectі datalist. Тут з'являється фактор підтримки браузера.

select широко підтримується браузерами порівняно з даталістичним. Перегляньте цю сторінку, щоб отримати повну підтримку браузера datalist--

Підтримка браузера Datalist

Де вибір підтримується в усіх браузерах (починаючи з IE6 +, Firefox 2+, Chrome 1+ тощо)


0

Його схоже на вибір, але даталіст має додаткові функціональні можливості, такі як автоматична пропозиція. Ви навіть можете вводити та бачити пропозиції під час і під час введення.

Користувач також зможе писати елементи, яких немає в списку.

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