Зачем нам нужно отключать = "отключено"?

По общему мнению, для атрибутов 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, так что вы действительно можете поместить все, что захотите. Реализация браузера имеет значение.