checked ="checked"vs checked = true

hop*_*hop 35 html javascript

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

document.getElementById('myRadio').checked = "checked";
Run Code Online (Sandbox Code Playgroud)

document.getElementById('myRadio').checked = true;
Run Code Online (Sandbox Code Playgroud)

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

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

Que*_*tin 48

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

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

document.getElementById('myRadio').checked = true;只是指定true没有铸造.

使用true因为它略微更有效,并且更多的意图向维护者透露.


Ode*_*ded 8

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

但是,这对于HTML 4之后的XHTML无效.

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

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

  • 不.在HTML 4及更早版本中它**需要一个值...它是可选的名称.即`checked ="checked"`是完整版本,但你可以将`checked ="`和```关闭,只留下值.(SGML可以*怪异*!) (5认同)
  • 也就是说,问题是询问DOM属性,而不是HTML规则. (3认同)

Guf*_*ffa 7

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

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

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

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

document.getElementById('myRadio').checked = true;
Run Code Online (Sandbox Code Playgroud)

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

document.getElementById('myRadio').setAttribute('checked', 'checked');
Run Code Online (Sandbox Code Playgroud)

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

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

document.getElementById('myRadio').removeAttribute('checked');
Run Code Online (Sandbox Code Playgroud)


Thi*_*ter 6

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

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

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

但是,由于你有DOM元素,你没有理由设置属性,因为你可以简单地使用 - 更舒适 - 布尔属性.由于true在布尔上下文中考虑非空字符串,因此设置elem.checked'checked'或不是虚假值(偶数'false''0')的任何其他内容将选中该复选框.没有理由不使用true,false尽管如此,你应该坚持正确的价值观.