Menu

Выпадающий список в HTML: select, option, optgroup, multiple

Как сделать выпадающий список в HTML через <select> и <option>: значения, вариант по умолчанию или заглушка, required, группы вариантов, множественный выбор, чтение и установка значения в JavaScript и оформление стрелки.

На этой странице есть исполняемые редакторы: меняйте, запускайте и сразу видите результат.

Как сделать выпадающий список в HTML

Выпадающий список это элемент <select> с <option> для каждого варианта. value каждого варианта это то, что отправляет форма; текст между тегами это то, что видит читатель. Выберите вариант и нажмите Submit:

Форма отправляет language=js: name списка и value выбранного варианта. selected задает вариант по умолчанию; без него выбран первый. Если у варианта нет value, вместо него отправляется текст.

Свяжите подпись со списком через for и id (или обернув его), чтобы клик по подписи ставил фокус на список, а программы чтения с экрана его объявляли.

Атрибуты select и option

ЭлементАтрибутЧто делает
<select>nameКлюч, под которым отправляется значение
<select>requiredНужно выбрать настоящий вариант, а не пустую заглушку в начале
<select>multipleМожно выбрать несколько вариантов
<select>sizeСколько строк видно (превращает список в поле со списком)
<select>disabledВесь список выключен и не отправляется
<option>valueЧто отправляется, когда вариант выбран
<option>selectedВариант выбран при загрузке страницы
<option>disabledВариант виден, но выбрать его нельзя
<optgroup>labelЗаголовок группы

Вариант-заглушка с required

У select всегда есть значение, поэтому без заглушки отправится первый настоящий вариант, даже если читатель ни разу не открыл список. Пустой первый вариант это исправляет, а required останавливает отправку, пока не выбран настоящий вариант:

Нажмите Continue, ничего не выбрав: браузер откажется и попросит выбрать элемент. У заглушки value="", и именно это required считает пустым значением, а disabled не дает выбрать ее снова, когда страна уже выбрана.

Группы вариантов через optgroup

<optgroup label="..."> ставит заголовок над набором вариантов. Сам заголовок выбрать нельзя:

Группы нельзя вкладывать друг в друга: у списка только один уровень заголовков. disabled у <optgroup> отключает все варианты внутри.

Множественный выбор

multiple позволяет выбрать несколько вариантов и превращает выпадающий список в поле со списком. Удерживайте Ctrl (Cmd на Mac), чтобы добавлять варианты по одному, или Shift, чтобы выбрать диапазон:

Форма отправляет skills=html и skills=css: одно и то же имя для каждого выбранного варианта. Многие не знают про Ctrl+клик, поэтому при небольшом количестве вариантов группой чекбоксов пользоваться проще.

Чтение и установка значения в JavaScript

select.value читает и задает значение выбранного варианта, а событие change срабатывает, когда читатель выбирает другой вариант. Частое применение: второй список, варианты которого зависят от первого:

new Option(text, value) создает вариант. select.selectedIndex это позиция выбранного варианта, а select.selectedOptions перечисляет выбранные, и именно так читают select с множественным выбором.

Оформление select

Раскрытый список рисуют браузер и операционная система, и оформить его можно лишь частично. Закрытое поле можно: appearance: none убирает стандартную стрелку, а фоновое изображение ставит на ее место вашу:

Дополнительный отступ в конце оставляет место для стрелки, чтобы длинный текст варианта не заходил под нее. font: inherit здесь так же важен, как у кнопок: по умолчанию select использует мелкий шрифт форм браузера. Варианты в раскрытом списке сохраняют стандартный вид. Chrome позволяет оформлять и раскрытый список, если включить это через appearance: base-select; браузеры без такой поддержки показывают стандартный список. Полный контроль везде дает только собственный виджет на ARIA, а сделать его правильно намного сложнее, чем кажется.

select, радиокнопки или datalist?

Что использоватьКогда
<select>Один выбор из длинного списка или когда мало места
РадиокнопкиОдин выбор из нескольких вариантов, которые должны быть видны все сразу (см. радиокнопка в HTML)
<input> с <datalist>Подсказки, но разрешено любое введенное значение

Частые ошибки

  • Нет заглушки при обязательном выборе. Первый настоящий вариант отправляется, даже если читатель его не выбирал.
  • Заглушка с настоящим значением, например value="none". required считает это корректным выбором. Используйте value="".
  • Варианты без value, когда текст длинный или переводится. Сервер получает видимый текст, который меняется вместе с языком.
  • multiple для нескольких вариантов. Чекбоксами пользоваться проще.
  • Обработчик click у вариантов. Используйте change у <select>; оно срабатывает и при изменении с клавиатуры.
  • Нет подписи. У select только с заглушкой пропадает название, как только выбран вариант.

Часто задаваемые вопросы

Как сделать выпадающий список в HTML?

Используйте <select> с одним <option> на каждый вариант: <select name="color"><option value="red">Red</option><option value="blue">Blue</option></select>. Дайте select name и <label>.

Как задать вариант по умолчанию в select?

Добавьте этому варианту selected: <option value="blue" selected>Blue</option>. Без него выбран первый вариант. В JavaScript присвойте select.value = 'blue'.

Как добавить заглушку (placeholder) в select?

Сделайте первый вариант пустым и недоступным для выбора: <option value="" disabled selected>Choose a country</option>. Добавьте <select> атрибут required, чтобы форму нельзя было отправить, пока не выбран настоящий вариант.

Как получить выбранное значение select в JavaScript?

select.value это значение выбранного варианта. Его видимый текст дает select.selectedOptions[0].text, а чтобы реагировать на смену выбора, слушайте событие change. Для select с множественным выбором переберите select.selectedOptions.

Чем select отличается от datalist?

<select> разрешает только перечисленные варианты. <input> с <datalist> предлагает варианты, пока читатель печатает, но принимает любой текст. Используйте select, когда ответ должен быть одним из ваших вариантов.

Coddy programming languages illustration

Учитесь программировать с Coddy

НАЧАТЬ