2012-05-18 141 views
30

以下两种用法有什么区别?checked =“checked”vs checked = true

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

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

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

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

回答

40
document.getElementById('myRadio').checked

是一个布尔值。它应该是truefalse

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

document.getElementById('myRadio').checked = true;刚刚分配true没有铸造。

使用true,因为它稍微更有效率,更有意向揭露维护者。

7

最初的checked属性(HTML 4及之前版本)不需要它的值 - 如果它存在,元素被“检查”,否则它不是。

然而这不是有效的XHTML随后HTML 4

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

你使用哪一个并不重要 - 使用对你最有意义并坚持下去的方法(或者同意你的团队走哪条路)。

+5

号在HTML 4和早前确实能需要一个值......这是,这是可选的名字。即'checked ='checked''是完整版本,但是你可以将'checked =''和'''关闭,并且将值留在后面。 (SGML可以得到*怪异的*!) – Quentin

+3

也就是说,问题在于询问DOM属性,而不是HTML规则。 – Quentin

+0

@Quentin - 很公平,尽管这几乎是关于语义的争论。 – Oded

2

checked属性是一个布尔值,因此除了布尔false"checked"值的其它"string"转换为true

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

<input type="checkbox" checked> 

您可以使其仅使用JS在DOM中进行布尔更改。

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

w3c

+2

您正在将JavaScript DOM属性与HTML属性混淆(并且在浏览器错误恢复中混淆了很多措施)。 – Quentin

6

document.getElementById('myRadio')返回你的DOM元素,我会在这个答案中引用它作为elem

elem.checked访问属性名为checked的DOM元素。这个属性总是一个布尔值。

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

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

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'); 
+0

属性和属性之间的很好的解释。谢谢! – Mac