Каков синтаксис для логических атрибутов, например. установлен флажок в HTML?

Похоже, что это глупый вопрос, но мне интересно, что лучший способ заявить, что флажок установлен или не установлен в HTML.

Я видел много разных примеров:

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

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

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

Какие браузеры работают, с какими из них и, самое главное, jQuery выясняет, какой флажок установлен во всех 3?

Edit: Спецификация W3C, по-видимому, подразумевает, что только проверенное attr является правильным. Означает ли это, что checked = "false" и checked = "no" все равно будет отмечать этот флажок?

Ответ 1

В HTML:

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

Для XHTML вам нужно использовать пары соответствия атрибутов/значений:

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

Ответ 2

HTML:

Любой из них должен быть правильным, как говорится на странице W3C. Атрибут checked должен быть установлен.

Как я писал в комментарии Coronatus:

На самом деле, не имеет значения, checked, checked = "whatever" или проверено = "проверено". Он проверяет boolean value, так что это либо true (set) или false (не установлено).

XHTML:

Вы должны указать его, поэтому checked="checked" является единственно допустимым. Большинство браузеров, вероятно, будут правильно анализировать значения HTML, но при этом у вас будет ошибка на странице.

Ответ 3

В соответствии с спецификацией HTML, правильный:

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

Я использую это, и jQuery отлично работает с ними.

Ответ 4

Быстрый тест показывает, что jQuery приравнивает любое значение, установленное для проверки.

alert( $('input:checked').length );
// Returns 5

Даже пустая строка и отрицательные значения.

Ответ 6

Присутствие свойства "checked" указывает статус. Значение не имеет значения/не требуется.

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

- мое предложение

Ответ 7

Я бы осторожно использовал его на chrome, firefox и opera. У Chorme, похоже, проблема с появлением флажков, Firefox чувствителен к регистру со стилями и тегами, а опера, похоже, работает нормально, но медленно обновляется. Могут быть только версии используемых браузеров.

Кроме того, я считаю, что он должен работать <input type="checkbox" checked /> просто отлично во всех них. Единственная разница в том, как отображаются отдельные браузеры для показа содержимого на странице.

Ответ 8

Спецификация W3C, по-видимому, подразумевает, что только проверенное attr является правильным. Означает ли это, что checked = "false" и checked = "no" все равно будет отмечать этот флажок?

Совершенно верно. Вот почему плохая идея использовать checked="true" и checked="yes", они подразумевают, что checked="false" и checked="no" не будут проверять флажок.

Ответ 9

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

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

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

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

Заключение

Пусть boolean - логический атрибут тега tag, например checked и <input type="checkbox".

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

<tag boolean />
<tag boolean="" />
<tag boolean="boolean" />
<tag boolean="BoOlEaN" />

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

<tag boolean="0" />
<tag boolean="1" />
<tag boolean="false" />
<tag boolean="true" />

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

<tag />

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

Если вы хотите написать действительный XHTML, используйте boolean="boolean", так как <tag boolean> недопустим XHTML (но действительный HTML), а другие альтернативы менее читаемы. Иначе просто используйте <tag boolean>, поскольку он короче.