代码之家  ›  专栏  ›  技术社区  ›  mpen

checked和selected的哪些值是false?

  •  50
  • mpen  · 技术社区  · 14 年前

    我想根据W3规范,你应该

    <input type="checkbox" checked="checked" />
    

    以及

     selected="selected"
    

    但是,大多数浏览器都会接受你只写“CHECKED”而不给它一个值。那么,如果您确实包含了属性,那么是否有任何值(始终)被视为false呢?

    5 回复  |  直到 14 年前
        1
  •  97
  •   mpen    7 年前

    没有值 这将导致复选框被取消选中。如果 checked 属性存在,复选框将被检查,而不管您将其设置为什么值。

    <input type="checkbox" checked />
    <input type="checkbox" checked="" />
    <input type="checkbox" checked="checked" />
    <input type="checkbox" checked="unchecked" />
    <input type="checkbox" checked="true" />
    <input type="checkbox" checked="false" />
    <input type="checkbox" checked="on" />
    <input type="checkbox" checked="off" />
    <input type="checkbox" checked="1" />
    <input type="checkbox" checked="0" />
    <input type="checkbox" checked="yes" />
    <input type="checkbox" checked="no" />
    <input type="checkbox" checked="y" />
    <input type="checkbox" checked="n" />

    呈现所有现代浏览器(FF3.6、Chrome 10、IE8)中检查的所有内容。

        2
  •  35
  •   Quentin    8 年前

    这个 checked selected 属性只能有两个值,一个是属性名的副本,另一个是空字符串(从HTML5开始)。给出任何其他值都是错误的。

    如果不想设置属性,则必须省略整个属性。

    注意,在 HTML 4 您可以省略除值之外的所有内容。 HTML 5 将此更改为省略除名称之外的所有内容(这没有实际区别)。

    因此,该属性的完整(除了在情况下的变化)有效表示形式集是:

    <input ... checked="checked"> <!-- All versions of HTML / XHTML -->
    <input ...          checked > <!-- Only HTML 4.01 and earlier -->
    <input ... checked          > <!-- Only HTML 5 and later -->
    <input ... checked=""       > <!-- Only HTML 5 and later -->
    

    作为text/html(html或XHTML)的文档将通过tag soup解析器提供,检查属性(带有任何值)的存在将被视为“应该检查这个元素”。因此,虽然无效, checked="true" , checked="yes" ,和 checked="false" 将全部触发选中状态。

    我不想知道如果给属性赋予不同的值,XML解析模式有什么样的错误恢复机制,但是我会 期待 HTML和/或简单错误恢复的遗留问题将以相同的方式处理它:如果属性存在,则检查元素。

    (以上所有规定同样适用于 挑选出来的 就像它对 选中的 .)

        3
  •  12
  •   Ciro Santilli OurBigBook.com    8 年前

    没有值被认为是错误的 ,仅缺少该属性。但是有很多无效值,有些实现可能会认为某些无效值为false。

    HTML5规范

    http://www.w3.org/TR/html5/forms.html#attr-input-checked :

    禁用的内容属性是布尔属性。

    http://www.w3.org/TR/html5/infrastructure.html#boolean-attributes :

    元素上布尔属性的存在表示真值,而属性的不存在表示假值。

    如果该属性存在,则其值必须是空字符串,或者是与该属性的规范名称不区分大小写的ASCII匹配的值,且不带前导或尾随空格。

    结论

    以下是 有效、等价和真实 :

    <input type="checkbox" checked />
    <input type="checkbox" checked="" />
    <input type="checkbox" checked="checked" />
    <input type="checkbox" checked="ChEcKeD" />
    

    以下是 无效的 :

    <input type="checkbox" checked="0" />
    <input type="checkbox" checked="1" />
    <input type="checkbox" checked="false" />
    <input type="checkbox" checked="true" />
    

    缺少属性是 :

    <input type="checkbox" />
    

    建议

    如果您想编写有效的XHTML,请使用 checked="checked" ,自 <input checked> 是无效的,其他替代方案的可读性较差。否则,就用 <已检查输入> 因为它比较短。

        4
  •  4
  •   jwheron    14 年前

    实际上,HTML 4.01规范说这些属性不需要值。我个人没有遇到过这样的情况:提供值会将这些控件呈现为未选中。

    以下是针对 selected checked .

    编辑: Firebug将复选框呈现为checked,而不考虑我为checked属性加引号的任何值(包括只键入“checked”而不加任何值),IE 8的开发工具强制checked=“checked”。不过,我不确定是否有其他类似的工具存在于其他浏览器中,这可能会改变复选框的呈现状态。

        5
  •  4
  •   Orbling    14 年前

    空字符串通常为false。

    显然,空字符串在所有浏览器中都不是空的,checked属性的出现被认为是checked。因此,整个属性必须存在或省略。