【问题标题】:checked = "checked" vs checked = true检查=“检查”与检查=真
【发布时间】:2012-05-25 21:16:36
【问题描述】:

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

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

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

对我来说,两者的行为方式相同。但是,我只是想知道为什么有两种方法可以做到这一点。

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

【问题讨论】:

    标签: javascript html


    【解决方案1】:

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

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

    document.getElementById('myRadio').checked = true; 只是分配 true 而不进行强制转换。

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

    【讨论】:

      【解决方案2】:

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

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

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

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

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

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

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

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

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

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

      【讨论】:

      • 属性和属性之间的良好解释。谢谢!
      【解决方案3】:

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

      但是,这对于遵循 HTML 4 的 XHTML 无效。

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

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

      【讨论】:

      • 没有。在 HTML 4 和更早的版本中,它确实 需要一个值……它是可选的名称。即checked="checked" 是完整版本,但您可以将checked="" 关闭并留下价值。 (SGML 会变得奇怪!)
      • 也就是说,问题是关于 DOM 属性,而不是 HTML 规则。
      • @Quentin - 很公平,尽管这几乎是关于语义的争论。
      【解决方案4】:

      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,因此您应该坚持使用正确的值。

      【讨论】:

        【解决方案5】:

        checked 属性是一个布尔值,因此除布尔值false 之外的其他"string""checked" 值将转换为true

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

        <input type="checkbox" checked>
        

        你可以让它取消检查,只使用 JS 在 DOM 中进行布尔更改。

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

        w3c

        【讨论】:

        • 您将 JavaScript DOM 属性与 HTML 属性混淆了(并在浏览器错误恢复中混为一谈)。
        猜你喜欢
        • 1970-01-01
        • 2016-09-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-20
        • 2017-04-08
        • 2010-12-11
        • 1970-01-01
        相关资源
        最近更新 更多