checked =“checked”vs checked = true

时间:2012-05-18 09:41:27

标签: javascript html

以下两种用法有什么区别?

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

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

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

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

5 个答案:

答案 0 :(得分:47)

document.getElementById('myRadio').checked是一个布尔值。它应为truefalse

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

document.getElementById('myRadio').checked = true;只需指定true而不进行投射。

使用true因为它的效率稍高一些,并且更有意向维护人员透露。

答案 1 :(得分:8)

原始checked属性(HTML 4及之前)不需要值 - 如果存在,则元素被“检查”,如果不存在,则不是。

然而,这对于遵循HTML 4的XHTML无效。

标准建议使用checked="checked"作为真实条件 - 所以你发布的两种方式最终都做同样的事情。

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

答案 2 :(得分:6)

document.getElementById('myRadio')会返回DOM元素,我会在此答案中将其引用为elem

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

编写HTML时,您在XHTML中使用checked="checked";在HTML中,您只需使用checked即可。设置属性时(这是通过.setAttribute('checked', 'checked')完成的),您需要提供一个值,因为某些浏览器认为空值不存在。

但是,由于你有DOM元素,你没有理由设置属性,因为你可以简单地使用 - 更舒适 - 布尔属性。由于非空字符串在布尔上下文中被视为true,因此将elem.checked设置为'checked'或其他任何非虚假值(甚至'false''0' })将选中复选框。没有理由不使用truefalse,所以你应该坚持使用正确的值。

答案 3 :(得分:5)

该元素同时具有属性和名为checked的属性。该属性确定当前状态。

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

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

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

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

如果设置属性,则使用字符串:

document.getElementById('myRadio').setAttribute('checked', 'checked');

请注意,设置属性也会更改属性,但设置属性不会更改属性。

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

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

答案 4 :(得分:2)

checked属性是布尔值,因此除布尔"checked"之外的其他"string"的{​​{1}}值转换为false

任何字符串值都为true。同样存在属性也是如此:

true

你可以使用JS来对它进行uncheked仅在DOM中进行布尔更改。

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

w3c