Какие значения для отмеченных и выбранных являются ложными?

Я думаю, согласно спецификации W3, вы должны делать

<input type="checkbox" checked="checked" />

и

 selected="selected"

Но большинство браузеров согласятся с этим, вы просто пишете "CHECKED" и не придаете ему значения. Итак, что, если вы включили атрибут, есть ли какие-либо значения, которые были бы (последовательно) считаются ложными?

Ответ 1

Есть нет значений, которые не будут отмечены флажком. Если атрибут checked существует, флажок будет проверяться независимо от того, какое значение вы его установили.

<input type="checkbox" checked />
<input type="checkbox" checked="" />
<input type="checkbox" checked="checked" />
<input type="checkbox" checked="unchecked" />
<input type="checkbox" checked="true" />
<input type="checkbox" checked="false" />
<input type="checkbox" checked="on" />
<input type="checkbox" checked="off" />
<input type="checkbox" checked="1" />
<input type="checkbox" checked="0" />
<input type="checkbox" checked="yes" />
<input type="checkbox" checked="no" />
<input type="checkbox" checked="y" />
<input type="checkbox" checked="n" />

Ответ 2

Атрибутам checked и selected разрешено использовать только два значения, которые являются копией имени атрибута и (начиная с HTML 5) пустой строкой. Предоставление любого другого значения является ошибкой.

Если вы не хотите устанавливать атрибут, тогда весь атрибут должен быть опущен.

Обратите внимание, что в HTML 4 вы можете опустить все, кроме значения. HTML 5 изменил это, чтобы опустить все, кроме имени (что не имеет практического значения).

Таким образом, полный (кроме вариаций в cAsE) набор действительных представлений атрибута:

<input ... checked="checked"> <!-- All versions of HTML / XHTML -->
<input ...          checked > <!-- Only HTML 4.01 and earlier -->
<input ... checked          > <!-- Only HTML 5 and later -->
<input ... checked=""       > <!-- Only HTML 5 and later -->

Документы, которые будут использоваться как text/html (HTML или XHTML), будут передаваться через парсер синтаксического супа, а наличие проверенного атрибута (с любым значением) будет рассматриваться как "Этот элемент должен быть проверен". Таким образом, в то время как недействительно, checked="true", checked="yes" и checked="false" будут вызывать проверенное состояние.

У меня не было желания узнать, какие механизмы восстановления ошибок существуют для режима синтаксического разбора XML, должно ли быть присвоено другое значение атрибуту, но я ожидал бы, что наследие HTML и/или простое восстановление ошибок будет обрабатывайте его так же: если атрибут есть, тогда элемент проверяется.

(И все вышесказанное в равной степени относится к selected, как к checked.)

Ответ 3

Значение не считается ложным, только отсутствие атрибута. Однако существует множество недопустимых значений, и некоторые реализации могут считать некоторые недопустимые значения ложными.

Спецификация HTML5

http://www.w3.org/TR/html5/forms.html#attr-input-checked:

Отключенный атрибут content является логическим атрибутом.

http://www.w3.org/TR/html5/infrastructure.html#boolean-attributes:

Наличие логического атрибута для элемента представляет истинное значение, а отсутствие атрибута представляет ложное значение.

Если атрибут присутствует, его значение должно быть либо пустой строкой, либо значением, которое не соответствует значению ASCII для канонического имени атрибута, без начального или конечного пробела.

Заключение

Ниже приведены действительные, эквивалентные и истинные:

<input type="checkbox" checked />
<input type="checkbox" checked="" />
<input type="checkbox" checked="checked" />
<input type="checkbox" checked="ChEcKeD" />

Ниже приведены недействительные:

<input type="checkbox" checked="0" />
<input type="checkbox" checked="1" />
<input type="checkbox" checked="false" />
<input type="checkbox" checked="true" />

Отсутствие атрибута является единственным допустимым синтаксисом для false:

<input type="checkbox" />

Рекомендация

Если вы хотите написать действительный XHTML, используйте checked="checked", так как <input checked> является недопустимым, а другие альтернативы менее читабельны. Иначе просто используйте <input checked>, поскольку он короче.

Ответ 4

Пустая строка, как правило, неверна.

По-видимому, пустая строка не считается пустым во всех браузерах, и наличие проверенного атрибута воспринимается как означенный. Таким образом, весь атрибут должен либо присутствовать, либо опущен.

Ответ 5

Собственно, спецификация HTML 4.01 говорит, что эти атрибуты не требуют значений. Я лично не сталкивался с ситуацией, когда предоставление значения отображало эти элементы управления как невыбранные.

Вот ссылки на документ спецификации для selected и checked.

Изменить: Firebug отображает флажок независимо от любых значений, которые я помещал в кавычки для проверенного атрибута (включая просто ввод "проверено" без каких-либо значений), а IE 8 Developer Tools принудительно проверяет = "проверено". Я не уверен, существуют ли какие-либо подобные инструменты для других браузеров, которые могут изменить отображаемое состояние флажка.