Удивительно, но HTML не использует логические значения для логических атрибутов.
В HTML логические атрибуты задаются либо простым добавлением имени атрибута, либо (особенно в XHTML) использованием имени атрибута в качестве его значения.
<input type="checkbox" disabled> <!-- HTML -->
<input type="checkbox" disabled /> <!-- Also HTML -->
<input type="checkbox" disabled="disabled" /> <!-- XHTML and HTML -->
Это задокументировано в спецификации HTML: http://www.w3.org/TR/html5/infrastructure.html#boolean-attribute
Некоторые атрибуты являются булевыми атрибутами. Наличие логического атрибута у элемента представляет истинное значение, а отсутствие атрибута представляет ложное значение.
Значения true и false не разрешены для логических атрибутов. Чтобы представить ложное значение, атрибут должен быть полностью опущен.
Чтобы добавить путаницы, в DOM эти логические атрибуты задаются логическими значениями, например:
/** @type HTMLInputElement */
const inputElement = document.createElement('input');
inputElement.disabled = true; // <-- The DOM *does* use a proper boolean value here.
console.log( inputElement.disabled ); // Prints "true"
inputElement.disabled = false;
console.log( inputElement.disabled ); // Prints "false"
...чтобы добавить еще больше путаницы - из-за ложности JavaScript - использование строковых значений со свойством не будет работать так, как вы ожидаете:
inputElement.disabled = 'true';
console.log( inputElement.disabled ); // Prints "true"
inputElement.disabled = 'false';
console.log( inputElement.disabled ); // *Still* prints "true"
(Это связано с тем, что строка JavaScript 'false'
не приведена к типу в логическое значение JavaScript false
).
Кроме того, некоторые HTML-атрибуты имеют возможные значения true
и false
, например contentEditable
(который также имеет inherit
в качестве третьего варианта), также рассмотрите <form autocomplete="">
, который может быть on
и off
(и многими другими значениями), что также может сбить некоторых людей с толку. Я думаю, что некоторые устаревшие расширения (эры Internet Explorer 4.0), такие как <object>
и <applet>
, могли иметь логические атрибуты и определенно имели логические значения в своих дочерних атрибутах <param value="">
, на данный момент это просто исторический курьез).
person
Dai
schedule
23.09.2015