Если в настройке `checkbox.checked = false` атрибут HTML также не очищен? - PullRequest
9 голосов
/ 05 декабря 2009

Вот мой HTML:

<input id="test" type="checkbox" checked="">

Вот выдержка из Firebug:

>>> test
<input id="test" type="checkbox" checked="">

>>> test.checked = false
false

>>> test
<input id="test" type="checkbox" checked="">

Хм ... я что-то упустил, или эта последняя строка не читает следующее?

<input id="test" type="checkbox">

В отношении пользовательского интерфейса этот флажок действительно снимается, когда я выполняю строку checked = false.

В любом случае, если есть какое-то законное объяснение этому, то как правильно снять флажок с JavaScript, если не checked = false?

Ответы [ 3 ]

23 голосов
/ 05 декабря 2009

Атрибут value для input type="text" и атрибуты checked или selected для input type="checkbox", radio и option соответствуют начальному значению поля формы, не текущее значение, установленное пользователем или сценарием. Следовательно, изменение свойства checked не изменяет значение атрибута, а установка атрибута checked не изменяет действительное видимое значение, которое будет отправлено с формой.

Атрибут checked="checked" соответствует свойству defaultChecked DOM , а не checked. Точно так же атрибут value="..." соответствует defaultValue.

(Обратите внимание, что здесь есть ошибки IE, поскольку IE не знает разницы между свойством и атрибутом.)

0 голосов
/ 05 декабря 2009

Возможно, вы ожидаете, что Firebug отобразит информацию о значении аналогично тому, как style обновляется на контрольной панели HTML . Однако input, select, option и textarea ведут себя не одинаково, и значения не будут обновляться в этой панели и всегда будут отображать исходные значения (те, которые находятся во время отображения страницы). Если пользовательский интерфейс обновляется, то вы знаете, что все делаете правильно.

0 голосов
/ 05 декабря 2009

checked = '', верно, я верю. Я подозреваю, что браузер пытается быть дружелюбным, когда вы делаете checked = false и делаете эквивалентное действие, checked = ''.

...