Зачем нам нужно отключено = "отключено"? - PullRequest
33 голосов
/ 30 июня 2011

Кажется, что существует общее мнение, что для атрибутов XHTML, которые не требуют никакого значения, мы должны повторить имя атрибута. Например. <input disabled> в правильном XHTML равно <input disabled="disabled"/>.

Однако мы можем отключить элемент HTML <input>, используя любой из следующего:

  • <input disabled=" "/>

  • <input disabled=""/>

  • <input disabled="asdfg">

  • <input disabled="false">

Есть ли на самом деле официальное правило для использования disabled="disabled"? Или это дело вкуса?

Ответы [ 4 ]

42 голосов
/ 30 июня 2011

Официально правильный синтаксис 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]'), поскольку это будет работать независимо от того, какой атрибут установлен.

6 голосов
/ 30 июня 2011

Для этого есть документация, официальный термин для таких атрибутов: "Булевы атрибуты"

Официальный стандарт на веб-сайте W3C http://www.w3.org/TR/html4/intro/sgmltut.html#h-3.3.4.2

В нем говорится, что:

Их появление в начальном теге элемента означает, что значение атрибута равно "true".Их отсутствие подразумевает значение «ложь».

Чтобы ваша разметка XHTML была действительной, вы должны использовать длинную руку

<option selected="selected">

Для HTML вы можетеиспользуйте свернутую форму

<option selected>
4 голосов
/ 30 июня 2011

@ Spudley уже дал вам ссылку на спецификации XHTML, чтобы предоставить официальную документацию.

Однако выбор сделать атрибут и значение одинаковыми в XHTML не был полностью произвольным.

Как говорит @Sohnee, XHTML 1.0 - это переформулировка HTML4.01 в XML, и цель состояла в том, чтобы максимально придерживаться шаблонов HTML 4, чтобы сделать переход максимально простым для веб-авторов.*

HTML всегда поддерживал disabled="disabled" в качестве допустимой формы для логических атрибутов, и причина этого в том, что он позволял определять сокращенный атрибут disabled в SGML.(Обратите внимание на комментарий @Thaddee Tyl "bit odd")

В 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.

1 голос
/ 30 июня 2011

html4-документ определяет это:

Логические атрибуты могут юридически принимать одно значение: имя самого атрибута.

Булевы атрибуты всегда были немного странными в мире sgml, так что на самом деле вы можете поместить все, что захотите.Реализация браузера - это все, что имеет значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...