<input type="checkbox">
<input> элементы типа checkbox по умолчанию отображаются как флажки (галочки), которые устанавливаются при активации, как вы можете видеть в официальной форме государственного документа. Точный вид зависит от конфигурации операционной системы, на которой работает браузер. Обычно это квадрат, но могут быть и закругленные углы. Флажок позволяет выбрать отдельные значения для отправки в форме (или нет).
Попробуйте
Примечание: Радиокнопки похожи на флажки, но с важным отличием — радиокнопки с одинаковыми именами сгруппированы в набор, в котором можно выбрать только одну радиокнопку за раз, в то время как флажки позволяют включать и выключать отдельные значения. Там, где существуют несколько одноимённых элементов управления, радиокнопки позволяют выбрать один из них, в то время как флажки позволяют выбрать несколько значений.
Значение
Строка, представляющая значение флажка. Это не отображается на стороне клиента, но на сервере это значение, передаваемое данным, отправляемыми вместе с name. Рассмотрим следующий пример:
<form> <div> <input type="checkbox" id="subscribeNews" name="subscribe" value="newsletter" /> <label for="subscribeNews">Subscribe to newsletter?</label> </div> <div> <button type="submit">Subscribe</button> </div> </form>
В этом примере у нас есть имя subscribe, и значение newsletter. При отправке формы пара имя/значение будет subscribe=newsletter.
Если атрибут value был опущен, значение по умолчанию для флажка — on, поэтому в этом случае отправленные данные будут subscribe=on.
Примечание: Если флажок снят, когда его форма отправляется, ни имя, ни значение не отправляются на сервер. Нет чисто HTML-метода для представления снятого состояния флажка (например, value=unchecked). Если вы хотите отправить значение по умолчанию для флажка, когда он снят, вы можете включить JavaScript для создания <input type="hidden"> в форме со значением, указывающим состояние снятия флажка.
Дополнительные атрибуты
В дополнение к общим атрибутам, общим для всех элементов <input>, элементы типа "checkbox" поддерживают следующие атрибуты.
checked-
Булевый атрибут, указывающий, установлен ли этот флажок по умолчанию (при загрузке страницы). Он не указывает, установлен ли этот флажок в настоящее время: если состояние флажка изменится, этот атрибут не отразит изменение. (Обновляется только атрибут
checkedобъектаHTMLInputElement.)Примечание: В отличие от других элементов управления вводом, значение флажка включается в отправляемые данные только в том случае, если флажок в настоящее время
checked. В этом случае значение атрибутаvalueфлажка передается как значение элемента ввода, илиon, если атрибутvalueне задан. В отличие от других браузеров, Firefox по умолчанию сохраняет динамическое состояние галочки элемента<input>при переходе на страницу. Используйте атрибутautocompleteдля управления этой функцией. value-
Атрибут
valueиспользуется всеми элементами<input>, но для элементов типаcheckboxон имеет специальное назначение: при отправке формы на сервер отправляются только флажки, которые в данный момент установлены, а отсылаемое значение — значение атрибутаvalue. Если атрибутvalueне указан, он по умолчанию равен строкеon. Это показано в разделе Значение выше.
Использование элементов ввода типа флажок
Мы уже рассмотрели самое основное применение флажков выше. Теперь давайте рассмотрим другие распространённые функции и методы, связанные с флажками, которые вам понадобятся.
Обработка нескольких флажков
В приведенном выше примере содержался только один флажок; в реальных ситуациях вам, вероятно, придется столкнуться с несколькими флажками. Если они совершенно не связаны, то вы можете просто обрабатывать их все по отдельности, как показано выше. Однако, если они связаны, дела обстоят не так просто.
Например, в следующей демонстрации мы включаем несколько флажков, чтобы пользователь мог выбрать свои интересы (полный вариант см. в разделе Примеры).
<fieldset> <legend>Choose your interests</legend> <div> <input type="checkbox" id="coding" name="interest" value="coding" /> <label for="coding">Coding</label> </div> <div> <input type="checkbox" id="music" name="interest" value="music" /> <label for="music">Music</label> </div> </fieldset>
В этом примере вы увидите, что мы присвоили каждому флажку то же самое name. Если оба флажка будут установлены, а затем форма отправлена, вы получите набор пар имя/значение, отправленных следующим образом: interest=coding&interest=music. Когда эта строка достигнет сервера, вам нужно будет разобрать её не как ассоциативный массив, поэтому будут получены все значения, а не только последнее значение interest. Для одного из методов, используемых с Python, см. Обработка нескольких флажков с одной переменной на стороне сервера, например.
Установка флажков по умолчанию
Чтобы установить флажок по умолчанию, укажите атрибут checked. См. пример ниже:
<fieldset> <legend>Choose your interests</legend> <div> <input type="checkbox" id="coding" name="interest" value="coding" checked /> <label for="coding">Coding</label> </div> <div> <input type="checkbox" id="music" name="interest" value="music" /> <label for="music">Music</label> </div> </fieldset>
Предоставление большего участка для нажатия флажков
В приведенных выше примерах вы, возможно, заметили, что вы можете переключать флажок, щелкнув по связанному элементу <label>, а также по самому флажку. Это очень полезная функция HTML-меток форм, которая облегчает нажатие нужного варианта, особенно на устройствах с небольшим экраном, таких как смартфоны.
Помимо доступности, это ещё одна причина для правильной настройки элементов <label> в ваших формах.
Флажки с неопределённым состоянием
Флажок может иметь состояние неопределённости. Это устанавливается с помощью свойства indeterminate объекта HTMLInputElement через JavaScript (его нельзя установить с помощью HTML-атрибута):
inputInstance.indeterminate = true;
Когда indeterminate равно true, в большинстве браузеров флажок отображается с горизонтальной линией в поле (внешне похожей на дефис или знак минуса) вместо отметки/галочки.
Примечание: Это чисто визуальное изменение. Оно не влияет на то, используется ли значение флажка при отправке формы. Это определяется состоянием checked, независимо от состояния indeterminate.
Для этого свойства не так много случаев применения. Самый распространённый — когда доступен флажок, который "владеет" рядом подвариантов (которые также являются флажками). Если все подварианты установлены, то флажок-владелец также установлен, а если они все сняты, то флажок-владелец также снят. Если хотя бы один или несколько подвариантов имеют другое состояние, чем остальные, состояние флажка-владельца становится неопределённым.
Это можно увидеть в следующем примере (спасибо CSS Tricks за вдохновение). В этом примере мы отслеживаем ингредиенты, которые мы собираем для рецепта. Когда вы устанавливаете или снимаете флажок ингредиента, функция JavaScript проверяет общее количество отмеченных ингредиентов:
- Если не отмечено ни одного, флажок названия рецепта устанавливается в снятое.
- Если отмечено один или два, флажок названия рецепта устанавливается в
indeterminate. - Если отмечено все три, флажок названия рецепта устанавливается в
checked.
Таким образом, в этом случае состояние indeterminate используется для обозначения того, что сбор ингредиентов начат, но рецепт ещё не завершен.
const overall = document.querySelector("#enchantment"); const ingredients = document.querySelectorAll("ul input"); overall.addEventListener("click", (e) => { e.preventDefault(); }); for (const ingredient of ingredients) { ingredient.addEventListener("click", updateDisplay); } function updateDisplay() { let checkedCount = 0; for (const ingredient of ingredients) { if (ingredient.checked) { checkedCount++; } } if (checkedCount === 0) { overall.checked = false; overall.indeterminate = false; } else if (checkedCount === ingredients.length) { overall.checked = true; overall.indeterminate = false; } else { overall.checked = false; overall.indeterminate = true; } }
Валидация
Флажки поддерживают валидацию (доступную для всех элементов <input>). Однако большинство из ValidityState всегда будут false. Если у флажка есть атрибут required, но он не установлен, то ValidityState.valueMissing будет true.
Примеры
Следующий пример — расширенная версия примера с "несколькими флажками", который мы видели выше. В нём больше стандартных опций, плюс флажок "другое", который при выборе отображает поле ввода для указания значения опции "другое". Это достигается с помощью простого блока JavaScript. В примере используются неявные метки, где <input> находится непосредственно внутри <label>. Поле ввода без видимой метки включает атрибут aria-label, который предоставляет его доступное имя. В этом примере также используется CSS для улучшения стилизации.
HTML
<form> <fieldset> <legend>Choose your interests</legend> <div> <label> <input type="checkbox" id="coding" name="interest" value="coding" /> Coding </label> </div> <div> <label> <input type="checkbox" id="music" name="interest" value="music" /> Music </label> </div> <div> <label> <input type="checkbox" id="art" name="interest" value="art" /> Art </label> </div> <div> <label> <input type="checkbox" id="sports" name="interest" value="sports" /> Sports </label> </div> <div> <label> <input type="checkbox" id="cooking" name="interest" value="cooking" /> Cooking </label> </div> <div> <label> <input type="checkbox" id="other" name="interest" value="other" /> Other </label> <input type="text" id="otherValue" name="other" aria-label="Other interest" /> </div> <div> <button type="submit">Submit form</button> </div> </fieldset> </form>
CSS
html { font-family: sans-serif; } form { width: 600px; margin: 0 auto; } div { margin-bottom: 10px; } fieldset { background: cyan; border: 5px solid blue; } legend { padding: 10px; background: blue; color: cyan; }
JavaScript
const otherCheckbox = document.querySelector("#other"); const otherText = document.querySelector("#otherValue"); otherText.style.visibility = "hidden"; otherCheckbox.addEventListener("change", () => { if (otherCheckbox.checked) { otherText.style.visibility = "visible"; otherText.value = ""; } else { otherText.style.visibility = "hidden"; } });
Техническое описание
Спецификации
| Спецификация |
|---|
| Стандарт HTML # checkbox-state-(type=checkbox) |
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на IOS | Samsung Internet | WebView Android | |
checkbox |
1 | 12 | 1 | 15 | 1 | 18 | 4 | 14 | 1 | 1.0 | 4.4 |
См. также
-
:checked,:indeterminate: селекторы CSS, которые позволяют форматировать флажки в зависимости от их текущего состояния -
HTMLInputElement: API DOM HTML, который реализует элемент<input> - Таблица совместимости свойств CSS для элементов форм
© 2005–2023 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/checkbox