Какие значения для отмеченных и выбранных являются ложными? - PullRequest
50 голосов
/ 19 ноября 2010

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

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

И

 selected="selected"

Но большинство браузеров примут его, вы просто пишете «ПРОВЕРЕНО» и не указываете его значение. Итак, что если вы включите атрибут, есть ли значения, которые (последовательно) будут считаться ложными?

Ответы [ 5 ]

88 голосов
/ 06 января 2011

Есть нет значений , что приведет к снятию флажка. Если атрибут 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" />

Отображает все проверенное во всех современных браузерах (FF3.6, Chrome 10, IE8).

34 голосов
/ 19 ноября 2010

В атрибутах 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.)

12 голосов

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

HTML5 spec

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

Атрибут отключенного содержимого является логическим атрибутом.

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

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

Если атрибут присутствует, его значение должно быть либо пустой строкой, либо значением, которое не зависит от регистра 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" />

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

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

4 голосов
/ 19 ноября 2010

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

Здесь приведены соответствующие ссылки на документ спецификации для выбранных и отмеченных .

Редактировать: Firebug отображает флажок как отмеченный независимо от любых значений, которые я помещаю в кавычки для атрибута selected (включая просто ввод «selected» без каких-либо значений), и средства разработчика IE 8 принудительно проверяют = «проверено». Однако я не уверен, существуют ли какие-либо аналогичные инструменты для других браузеров, которые могут изменять отображаемое состояние флажка.

4 голосов
/ 19 ноября 2010

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

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

...