HTML复选框的checked属性的正确值是什么?

bul*_*ley 418 html forms checkbox html-input

我们都知道如何在HTML中形成一个复选框输入:

<input name="checkbox_name" id="checkbox_id" type="checkbox">
Run Code Online (Sandbox Code Playgroud)

我不知道 - 复选复选框的技术正确值是什么?我看到这些都有效:

<input name="checkbox_name" id="checkbox_id" type="checkbox" checked>
    <input name="checkbox_name" id="checkbox_id" type="checkbox" checked="on">
    <input name="checkbox_name" id="checkbox_id" type="checkbox" checked="yes">
    <input name="checkbox_name" id="checkbox_id" type="checkbox" checked="checked">
    <input name="checkbox_name" id="checkbox_id" type="checkbox" checked="true">
Run Code Online (Sandbox Code Playgroud)

答案是无关紧要的吗?我看到的答案,没有证据标记为正确这里规范本身:

复选框(和单选按钮)是可由用户切换的开/关开关.当设置了控制元素的checked属性时,开关处于"打开"状态.提交表单时,只有"on"复选框控件才能成功.表单中的多个复选框可以共享相同的控件名称.因此,例如,复选框允许用户为同一属性选择多个值.INPUT元素用于创建复选框控件.

规范作者会说什么是正确答案?请提供基于证据的答案.

Han*_*ele 439

严格来说,你应该把一些有意义的东西 - 根据这里的规范,最正确的版本是:

<input name=name id=id type=checkbox checked=checked>
Run Code Online (Sandbox Code Playgroud)

对于HTML,您还可以使用空属性语法,checked=""甚至简单checked(对于更严格的XHTML,不支持此操作).

但实际上,大多数浏览器都会支持引号之间的任何值.将检查以下所有内容:

<input name=name id=id type=checkbox checked>
<input name=name id=id type=checkbox checked="">
<input name=name id=id type=checkbox checked="yes">
<input name=name id=id type=checkbox checked="blue">
<input name=name id=id type=checkbox checked="false">
Run Code Online (Sandbox Code Playgroud)

只有以下内容将被取消选中:

<input name=name id=id type=checkbox>
Run Code Online (Sandbox Code Playgroud)

另见这个类似的问题disabled="disabled".

  • 这是错的.如果你查看[规范](http://www.w3.org/TR/REC-html40/interact/forms.html#edef-INPUT),它会说:`checked(checked)`表示"已检查"属性可以具有'已检查'的值.只有`checked`是可接受的值,其他都不是.[布尔属性](http://www.w3.org/TR/REC-html40/intro/sgmltut. html#h-3.3.4.2)允许你省略所有*除了*值,因此`checked`是可接受的以及`checked ="checked"`. (36认同)
  • 一个面向HTML5的W3页面说`checked`,`checked =""`和`checked ="checked"`是正常的.http://www.w3.org/TR/html-markup/input.checkbox.html (12认同)
  • @Quentin tl,dr:它是语义,但[空属性语法](http://www.w3.org/TR/html-markup/syntax.html#syntax-attr-empty)仅指定属性的_name_ ,而不是_value_. (3认同)
  • 如果复选框**保持选中状态**(重新加载页面时)**尽管省略了** [boolean / empty 属性](https://www.w3.org/TR/2017/REC-html52-20171214/syntax .html#elements-attributes) `checked`,使用 [autocomplete="off"](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-autocomplete) 保持您的浏览器不会自动检查它。 (2认同)

Cir*_*四事件 49

HTML5规范:

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

disabled content属性是布尔属性.

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

元素上存在布尔属性表示真值,缺少属性表示false值.

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

结论:

以下是有效,等效和真实的:

<input type="checkbox" checked />
<input type="checkbox" checked="" />
<input type="checkbox" checked="checked" />
<input type="checkbox" checked="ChEcKeD" />
Run Code Online (Sandbox Code Playgroud)

以下是无效的:

<input type="checkbox" checked="0" />
<input type="checkbox" checked="1" />
<input type="checkbox" checked="false" />
<input type="checkbox" checked="true" />
Run Code Online (Sandbox Code Playgroud)

缺少该属性是false的唯一有效语法:

<input />
Run Code Online (Sandbox Code Playgroud)

建议

如果您关心编写有效的XHTML,请使用checked="checked",因为<input checked>无效的XHTML(但有效的HTML)和其他替代方案的可读性较差.否则,只需使用<input checked>它,因为它更短.

  • 我认为这是正确的答案,强调缺席意味着错误。虽然 ="true" 有效,但这意味着 ="false" 会按预期工作,但事实并非如此。 (3认同)
  • 我决定回滚编辑2并保持规格第一.虽然示例首先是一般的方法,但我认为这是这个答案的区别方面,就目前的最佳例子而言.还是)感谢你的建议 :-) (2认同)

Nie*_*sol 35

<input ... checked />
<input ... checked="checked" />
Run Code Online (Sandbox Code Playgroud)

这些同样有效.在JavaScript中:

input.checked = true;
input.setAttribute("checked");
input.setAttribute("checked","checked");
Run Code Online (Sandbox Code Playgroud)

  • setAttribute修改DOM*标记*,属性赋值不需要. (4认同)

Joh*_*aig 6

你想要这个我想: checked='checked'


wen*_*ang 5

  1. 检查
  2. 检查=""
  3. 检查="选中"

    是等价的;


根据spec 复选框 '----ⓘchecked ="checked"或""(空字符串)或空指定元素表示选定的控件.---'