Согласно этой статье MDN, атрибут checked
флажка указывает только на то, установлен ли флажок по умолчанию, а не на его текущее состояние.
Однако самое простое тестирование показывает, что оно действительно отражает текущее состояние флажка:
<input type = "checkbox" id = "test">
<button type = "button" onclick = "console.info(document.querySelector('#test').checked);">Test</button>
Статья MDN неверна или браузеры просто не соответствуют приведенной здесь спецификации?
В статье поясняется , что значение HTMLInputElement
checked
обновляется в зависимости от состояния, о чем вы можете прочитать больше здесь.
При этом я понятия не имею, как объяснить разницу между этими понятиями, и не уверен, что сам ее понимаю. Любая ясность приветствуется!
Статья MDN верна. Браузеры тоже правы. Несоответствие объясняется тем, что флажок HTML имеет как атрибут содержимого checked
, так и свойство checked
JavaScript, которые связаны, но различны. В статье обсуждается первое, тогда как в вашем коде используется второе.
Атрибут содержимого checked
соответствует фактическому атрибуту checked
, checked = ""
или checked = "checked"
, если таковой имеется, в HTML-разметке элемента <input>
. Вы можете получить значение атрибута, вызвав метод Element.getAttribute:
<input type = "checkbox" id = "test" checked = "checked">
<button type = "button" onclick = "console.info(document.querySelector('#test').getAttribute('checked') ?? 'null');">Log Attribute</button>
В приведенном выше фрагменте флажок установлен по умолчанию, и кнопка будет регистрировать строку "checked"
независимо от того, включаете ли вы флажок или выключаете его.
Напротив, как вы заметили, свойство JavaScript checked
отражает текущее состояние флажка:
<input type = "checkbox" id = "test" checked = "checked">
<button type = "button" onclick = "console.info(document.querySelector('#test').checked);">Log Property</button>
Спасибо ! Я понятия не имел, что эти вещи разделены, мой основной язык — C x)
да, в статье неправильная "проверено — проверено ли управление" смотрите спецификацию