【问题标题】:What values for checked and selected are false?选中和选中的哪些值是假的?
【发布时间】:2010-11-19 19:30:27
【问题描述】:

我认为根据 W3 规范,你应该这样做

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

 selected="selected"

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

【问题讨论】:

标签: html w3c


【解决方案1】:

没有值会导致复选框被取消选中。如果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)中检查的所有内容。

【讨论】:

  • 为什么这个被接受的答案? OP的问题不是你必须设置什么值才能将其实际设置为未选中?
  • @cjmling 是的,这是我最初的问题。我想我应该在我的回答中更清楚地说明它:有 no 值会导致它呈现未经检查的状态。如果该属性存在,则会对其进行检查。
【解决方案2】:

checkedselected 属性只允许两个值,它们是属性名称的副本和(从 HTML 5 开始)一个空字符串。给出任何其他值都是错误的。

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

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

因此,属性的完整(除了 cAsE 的变体)有效表示集是:

<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)的文档将通过标签汤解析器提供,并且检查属性(具有任何值)的存在将被视为“应检查此元素”。因此,虽然无效,checked="true"checked="yes"checked="false" 都会触发检查状态。

如果为属性赋予不同的值,我没有任何兴趣去找出针对 XML 解析模式的错误恢复机制,但我预计 HTML 的遗留问题和/或简单的错误恢复将以相同的方式处理它:如果属性存在,则检查元素。

(以上所有内容同样适用于selectedchecked。)

【讨论】:

  • 好吧...因为我正在为 C# 编写一个 CSS 选择器引擎,并且我试图找到“所有选中的复选框”。现在我只是检查属性是否存在,但如果有一些错误值,那么我必须做进一步的检查。
  • 刚刚测试...似乎是真的。让我的生活更轻松。
【解决方案3】:

没有值被认为是假的,只有属性的缺失。但是有很多无效值,并且某些实现可能会将某些无效值视为 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" />

没有属性是 false 的唯一有效语法:

<input type="checkbox" />

推荐

如果您关心编写有效的 XHTML,请使用 checked="checked",因为 &lt;input checked&gt; 是无效的,并且其他替代方案的可读性较差。否则,只需使用 &lt;input checked&gt;,因为它更短。

【讨论】:

  • Invalid 但在我知道的几乎所有浏览器中都可以正常工作。如果你是编写 HTML 的人,很容易坚持有效的东西,但如果你正在编写解析器,你也必须支持无效的东西:|
【解决方案4】:

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

这里是selectedchecked 的规范文档的相应链接。

编辑: Firebug 将复选框呈现为选中状态,而不管我为选中的属性放在引号中的任何值(包括只键入没有任何值的“选中”),并且 IE 8 的开发人员工具强制选中=“检查”。但是,我不确定其他浏览器是否存在任何类似的工具,这些工具可能会改变复选框的呈现状态。

【讨论】:

  • 大多数人和当然大多数代码验证器现在都希望使用 XHTML,至少是过渡(如果不是 Strict),并且在 XHTML 中这些值是必需的。 HTML 4.01 不是当前标准。
  • 我确定您在这方面是对的,但我不确定这是否会使我的答案不正确。我在此处找到的 XHTML 参考 (xhtml.com/en/xhtml/reference/input) 没有包含有关该属性值的信息,这些信息会否定该属性的核心效果。
  • HTML 4.01 是 HTML 的最新标准。 XHTML 是一种不同的语言,尽管相关,但在地球上最常用的浏览器 (IE8) 的最新(最终)版本中仍然不支持。 (处理 XHTML 时声称它不是 HTML)。
  • 绝大多数专业的 Web 开发人员倾向于为 XHTML Transitional 编写代码,并且使用原始 HTML 4.01 是不寻常的。 IE* 是否曾经完全支持任何东西。 ;-)
  • 有“完全”和“根本没有”。向下载提示先生问好。 (绝大多数专业网络开发人员以货物崇拜的方式对待 Doctypes 而不了解其含义(除了怪癖/标准模式,只有在我们幸运的情况下)。
【解决方案5】:

空字符串通常为假。

显然,空字符串在所有浏览器中都不会被视为空字符串,并且选中的属性的存在被视为已选中。所以整个属性要么存在要么省略。

【讨论】:

  • 当我在 Firefox 和 IE(7 和 8)中测试 check="" 时,它仍然呈现为选中状态。
  • @jwiscarson 非常正确,确实如此-我的回答不正确,因此我对其进行了修改。状态是通过属性是否存在而不是其值来确定的。
【解决方案6】:

checked 属性可以在 javascript 中通过以下方式设置。 (isOrdered 存储一个布尔值)

<input checked={isOrdered} type="checkbox"/> Ordered

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-18
    • 2015-11-16
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    相关资源
    最近更新 更多