2009-12-04 5 views
9

Вот мой HTML:Должен ли параметр `checkbox.checked = false` не очищать атрибут 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"> 

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

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

+2

Возможно, вам все равно, что говорит Firebug, пока данные попадают на ваш сервер, и пользовательский интерфейс ведет себя так, как ожидалось. –

+0

Это просто, чтобы продемонстрировать, о чем я говорю. Реальная проблема заключается в том, что у меня есть CSS, который должен иметь эффект, основанный на том, установлен флажок или нет, и он выполняет свою работу только при установке флажка, а не при установке '.checked'. – Kev

ответ

23

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

Атрибут checked="checked" соответствует defaultCheckedDOM property, а не checked. Аналогично, атрибут value="..." соответствует defaultValue.

(Примечание есть IE Gotchas здесь из-за IE не зная разницы между свойством и атрибутом.)

+0

Я никогда не упоминал атрибут value. В моем тестовом флажке даже нет. Поэтому я не уверен, как применяется ваш первый абзац, но свойство defaultChecked было ключевым. Благодаря! – Kev

+0

Отредактировано, еще раз спасибо. – Kev

+0

Это фон: checked/defaultChecked - это особый случай значения/defaultValue для флажков (аналогично выбран/defaultSelected для опций). – bobince

-3

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

+2

Пробовал. Кажется, не изменит результат. Также в соответствии с https://developer.mozilla.org/en/XUL/checkbox проверенное свойство является булевым. – Kev

+0

Может быть, я смущен. Что-то не работает, как вы ожидаете? –

+0

Извините, я попытался выразить это в вопросе. Я ожидаю, что свойство '.checked' будет влиять на атрибут HTML (тем более, что это влияет на пользовательский интерфейс.) Но атрибут HTML не изменяется, независимо от того, из чего он первоначально установлен. Это кажется довольно непоследовательным. – Kev

-2

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

+0

Это неправда. Попробуйте сами с HTML-элементом 'a' без атрибута value - снова запустите строки' a', 'a.value = 7' и' a'. – Kev

+0

Извините, но я должен уточнить, что 'a' была переменной JavaScript, указывающей на элемент' input'. Вероятно, это натолкнулось так, как будто я имел в виду якорный тег. – Kev

+0

Это действительно произошло, но я удаляю этот комментарий, поскольку он больше не нужен. Тем не менее, я не понимаю сценарий, который вы пытаетесь описать в своем первом комментарии, особенно с «и' a' снова » –