Каково правильное значение для отключенного атрибута?

167

Каково правильное значение disabledатрибута для текстового поля или текстовой области?

Я видел следующие использованные ранее:

<input type="text" disabled />
<input type="text" disabled="disabled" />
<input type="text" disabled="true" />
tskuzzy
источник
5
Атрибуты должны иметь значение, даже для атрибутов, чье простое присутствие сигнализирует о том, что что-то должно быть сделано. disabled="false"все равно отключил бы элемент, потому что это ПРИСУТСТВИЕ disabledвызывает отключение, а не значение атрибута.
Марк Б
Ссылка, которую я разместил в качестве комментария к ответу js1568, подтверждает / разъясняет, что говорит @Marc B: whatwg.org/specs/web-apps/current-work/multipage/…
Джеймс Аллардике
возможный дубликат stackoverflow.com/questions/1033944/… потому что оба являются булевыми атрибутами (не помечены)
Ciro Santilli 法轮功 冠状 病 六四 事件 法轮功

Ответы:

148
  • Для XHTML <input type="text" disabled="disabled" />- допустимая разметка.
  • Для HTML5 <input type="text" disabled />действителен и используется W3C на своих примерах.
  • На самом деле, оба способа работают во всех основных браузерах.
Эрик Петручелли
источник
15
В html5 ввод является пустым элементом и не требует самозакрывающейся косой черты: w3.org/TR/html5/syntax.html#void-elements and w3.org/TR/html5/syntax.html#syntax-start- тег
Даниил
1
@ Даниэль К. Это не нужно, если только не разметить полиглот HTML / XML.
Патанджали
108

HTML5 spec :

http://www.w3.org/TR/html5/forms.html#enabling-and-disabling-form-controls:-the-disabled-attribute :

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

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

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

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

Вывод :

Следующее является действительным, эквивалентным и верным :

<input type="text" disabled />
<input type="text" disabled="" />
<input type="text" disabled="disabled" />
<input type="text" disabled="DiSaBlEd" />

Следующее недействительно :

<input type="text" disabled="0" />
<input type="text" disabled="1" />
<input type="text" disabled="false" />
<input type="text" disabled="true" />

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

<input type="text" />

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

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

Сиро Сантилли 郝海东 冠状 病 六四 事件 法轮功
источник
3
Примечание. Если вы используете AngularJS и вам нужно привязать отключенное состояние к переменной, вы можете использовать ng-disabledвместо этого. Подобно другим атрибутам, подобным этому, как правило, у них есть интеллектуальный ng-*аналог
jakub.g
5
disabled={true}работает в JSX-кодеactJ, но я уверен, что он будет перенесен только в один из допустимых / разрешенных HTML5-форматов
RBT
1

Я только что попробовал все это, и для IE11 единственное, что, кажется, работает, отключено = "true". Значения отключено или не указано значение не работает. На самом деле, jsp получил ошибку, равную требуется для всех полей, поэтому я должен был указать disabled = "true", чтобы это работало.

Эдмонд М.Е.
источник
1
Вопрос OP был о HTML (то есть средствах управления на стороне клиента). Вы смотрите на серверные элементы управления; у них разные соглашения. Вы заметите разницу, если будете проверять вывод HTML своей JSP. Если у вас все еще есть сомнения, попробуйте эту скрипку в IE11.
Рууд Хелдерман,
Я видел то же самое на стороне клиента в IE 11. IE 11 заставляет что-то существовать, поэтому просто установка отключена приводит к отключению = ""
Robert Achmann
1

В HTML5 нет правильного значения, все основные браузеры на самом деле не заботятся о том, что это за атрибут, они просто проверяют, существует ли атрибут, поэтому элемент отключен.

MadsHaupt
источник