Зачем нам нужно отключать = "отключено"?
По общему мнению, для атрибутов XHTML, которые не требуют какого-либо значения, мы должны повторить имя атрибута. Например. <input disabled>
в правильном XHTML есть <input disabled="disabled"/>
.
Однако мы можем отключить элемент HTML <input>
, используя любой:
-
<input disabled=" "/>
-
<input disabled=""/>
-
<input disabled="asdfg">
-
<input disabled="false">
Существует ли официальное правило использовать disabled="disabled"
? Или это вопрос вкуса?
Ответы
Ответ 1
Официально корректный синтаксис xhtml disabled="disabled"
.
Причиной этого является то, что xhtml является синтаксисом XML, а XML требует, чтобы атрибуты имели значения. Спецификации xhtml также явно указывают, что значение должно быть "отключено".
Причина выбора этого значения над любым другим возможным значением была довольно произвольной; они просто решили, что все ранее логические атрибуты должны быть преобразованы в формат XML, сделав их значение таким же, как и их имя.
Итак, есть официальная спецификация, в которой говорится, что вы должны использовать этот полный синтаксис. Но это относится только к документам xhtml. Вы можете найти здесь здесь (если вы ищете disabled
на этой странице, вы увидите, что он указан как разрешающий "disabled"
как значение. Аналогично для атрибутов readonly
и checked
).
Обычный HTML - как v4, так и v5 - не привязан к ограничениям XML таким образом и не требует значения атрибута для disabled
; простое существование атрибута disabled
достаточно для отключения поля, независимо от того, есть ли у вас значение для атрибута или какое это значение.
Последний результат всего этого заключается в том, что если вы используете доктрину XHTML или хотите сохранить совместимость с XML, вы должны использовать disabled="disabled"
. Если вы не используете XHTML и вам не нужен синтаксис XML, вы можете просто использовать disabled
самостоятельно или с любым значением атрибута, который вам нравится.
Еще одна вещь, которую я хотел бы отметить (слегка отвлекаясь от темы, но может быть уместной) заключается в том, что это может повлиять на любой код CSS или JQuery, который может ссылаться на это поле. Например, я видел людей, использующих селектора JQuery, такие как $('[disabled=disabled]')
и подобные в CSS. Это, очевидно, зависит от атрибута, имеющего ожидаемое значение. Поэтому, если вы собираетесь ссылаться на логический атрибут, подобный этому в селекторе, вы должны ссылаться на него без значения, например: $('[disabled]')
, поскольку это будет работать независимо от атрибута.
Ответ 2
Существует документация для этого, официальным термином для таких атрибутов является "Логические атрибуты"
Официальный стандарт находится на веб-сайте W3C http://www.w3.org/TR/html4/intro/sgmltut.html#h-3.3.4.2
В нем говорится, что:
Их появление в стартовом теге элемент означает, что значение атрибут "true". Их отсутствие подразумевает значение "false".
Чтобы ваша маркировка XHTML была действительной, вы должны использовать длинный
<option selected="selected">
Для HTML вы можете использовать минимизированную форму
<option selected>
Ответ 3
@Spudley уже предоставил вам ссылку на спецификации XHTML, чтобы предоставить официальную документацию.
Выбор сделать как атрибут, так и значение одинаковым в XHTML не был полностью произвольным.
Как поясняет @Sohnee, XHTML 1.0 был переформулировкой HTML4.01 в XML, и целью было как можно больше придерживаться шаблонов HTML 4, чтобы сделать переход максимально простым для веб-авторов.
HTML всегда поддерживал disabled="disabled"
как допустимую форму для логических атрибутов, и причина этого в том, что разрешено определять сокращенный атрибут disabled
в SGML. (Примечание @Thaddee Tyl "бит нечетный" комментарий)
В SGML disabled
по своему собственному атрибуту не является именем атрибута без значения, это значение атрибута без имени. то есть имя выводится из значения. Чтобы сделать все это в SGML и быть обратно совместимым с тем, что всегда делали браузеры, имя и значение должны быть определены одинаковыми.
Обратите внимание, что это влияет только на проверку на основе SGML. Логика анализатора браузеров не основана на SGML и никогда не заботилась об этой тонкости, поэтому на практике вы можете использовать любое значение для атрибута, который вам нравится.
Проверка HTML5 не основана на SGML, поэтому ограничение было ослаблено. disabled=""
теперь действителен. disabled="true"
и disabled="false"
недействительны, потому что disabled="false"
запутывает, поскольку, как вы заметили, он отключает, а не включает элемент управления. Подробнее см. http://www.w3.org/TR/html5/common-microsyntaxes.html#boolean-attributes.
Ответ 4
В документе html4 указано следующее:
Логические атрибуты могут юридически принимать одно значение: имя самого атрибута.
Логические атрибуты всегда были немного странными в мире sgml, так что вы действительно можете поместить все, что захотите. Реализация браузера имеет значение.