Javascript 勾选=“已勾选”;勾选“;vs检查=真

Javascript 勾选=“已勾选”;勾选“;vs检查=真,javascript,html,Javascript,Html,以下两种用法的区别是什么 document.getElementById('myRadio').checked = "checked"; 及 对我来说,两者的行为方式都是一样的。但是,我只是想知道为什么有两种方法可以做同样的事情 哪一个是理想的用法?我需要支持IE7和更高版本。原始的checked属性(HTML 4和之前的版本)不需要在其上设置值-如果存在,则元素被“选中”,如果不存在,则元素不被选中 但是,这对于HTML4之后的XHTML无效 该标准建议使用checked=“checked”

以下两种用法的区别是什么

document.getElementById('myRadio').checked = "checked";

对我来说,两者的行为方式都是一样的。但是,我只是想知道为什么有两种方法可以做同样的事情


哪一个是理想的用法?我需要支持IE7和更高版本。

原始的
checked
属性(HTML 4和之前的版本)不需要在其上设置值-如果存在,则元素被“选中”,如果不存在,则元素不被选中

但是,这对于HTML4之后的XHTML无效

该标准建议使用
checked=“checked”
作为true的条件-因此,您发布的两种方式最终都会做相同的事情


你使用哪一个其实并不重要——使用对你最有意义的一个,并坚持下去(或者与你的团队达成一致)。

checked
属性是一个布尔值,所以
“checked”
其他
“string”
的值将布尔
false
转换为
true

任何字符串值都将为true。属性的存在也使其成为现实:

<input type="checkbox" checked>

只有使用JS在DOM中进行布尔更改,才能取消勾选

所以答案是:他们是平等的


文档。getElementById('myRadio')。选中的是布尔值。它应该是
true
false


document.getElementById('myRadio').checked=“checked”将字符串强制转换为布尔值,这是真的


document.getElementById('myRadio')。checked=true只指定
true
而不强制转换


使用
true
,因为它稍微更有效,并且更能向维护人员揭示意图。

document.getElementById('myRadio')
返回DOM元素,我将在这个答案中将其称为
elem

elem.checked
访问DOM元素名为
checked
的属性。此属性始终是布尔值

编写HTML时,在XHTML中使用
checked=“checked”
;在HTML中,您只需使用
checked
。在设置属性时(这是通过<代码> .StestAtg'(“检查”、“检查”)< /C> >进行的,您需要提供一个值,因为一些浏览器认为不存在空值。
但是,由于您有DOM元素,因此没有理由设置该属性,因为您可以简单地为它使用-更舒适-布尔属性。由于非空字符串在布尔上下文中被视为
true
,因此将
elem.checked
设置为
“checked”
或任何其他非伪值(即使
'false'
'0'
)都将选中该复选框。没有理由不使用
true
false
,尽管如此,您应该坚持使用正确的值。

元素有一个名为
的属性和一个名为checked
的属性。该属性确定当前状态

属性是字符串,属性是布尔值。从HTML代码创建元素时,将从标记设置属性,并根据属性的值设置属性

如果标记中没有该属性的值,则该属性将变为
null
,但该属性始终为
true
false
,因此它将变为
false

设置属性时,应使用布尔值:

document.getElementById('myRadio').checked = true;
如果设置属性,则使用字符串:

document.getElementById('myRadio').setAttribute('checked', 'checked');
请注意,设置属性也会更改属性,但设置属性不会更改属性

还请注意,无论将属性设置为什么值,该属性都将变为
true
。即使使用空字符串或
null
,设置属性也意味着已选中该属性。使用
removeAttribute
取消选中使用属性的元素:

document.getElementById('myRadio').removeAttribute('checked');

你把JavaScriptDOM属性和HTML属性搞混了(为了更好的度量,你在浏览器错误恢复中搞混了)。在HTML4和更早的版本中,它确实需要一个值……这个名称是可选的。i、 e.
checked=“checked”
是完整版本,但您可以将
checked=“
关闭,只保留值。(SGML可能会变得很奇怪!)也就是说,问题在于DOM属性,而不是HTML规则。@Quentin-很公平,尽管这几乎是关于语义的争论。属性和属性之间有很好的解释。谢谢
document.getElementById('myRadio').removeAttribute('checked');