HTML复选框的选中属性的正确值是多少?


436

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

<input name="checkbox_name" id="checkbox_id" type="checkbox">

我不知道-选中的复选框的技术上正确的值是多少?我看过所有这些工作:

<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">

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

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

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


在问题摘要中,您提到了选中属性的值,但是在问题描述中,您讨论了选中复选框的正确值。复选框的“值”与选中的属性不同,我相信在您的问题描述中,您还指属性的值,也许您想调整问题描述。对于一个复选框审查的“价值” stackoverflow.com/questions/14323899/...
melutovich

Answers:


451

严格来说,您应该输入有意义的内容-根据此处的规范,最正确的版本是:

<input name=name id=id type=checkbox checked=checked>

对于HTML,您还可以使用empty属性语法,,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">

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

<input name=name id=id type=checkbox>

另请参见上的类似问题disabled="disabled"


39
错了 如果您查看规范,它会显示:checked (checked)表示“ checked属性可以具有'checked'值。)只有checked一个可接受的值,其他都不是。布尔属性允许您省略该值以外的所有内容,因此checked是可以接受的还有checked="checked"
昆汀

14
HTML5的至上W3页说checkedchecked=""checked="checked"都OK。w3.org/TR/html-markup/input.checkbox.html
Ryan Williams

1
@昆汀,我很抱歉,那句话对我来说没有意义。您是说可以省略属性名称以外的所有内容吗?因为如果您可以省略除value以外的所有内容,则可以简单地编写"checked"(不带属性名)并使其正常工作。
Hannele 2014年

4
@Quentin tl,dr:这是语义,但是空属性语法仅指定属性名称,而不指定value
Hannele 2014年

1
如果尽管忽略boolean / empty属性复选框仍处于选中状态(重新加载页面时),请使用autocomplete =“ off”来阻止浏览器自动对其进行检查。 checked
处理

58

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 />

建议

如果您关心编写有效的XHTML,请使用checked="checked",因为<input checked>XHTML是无效的(但有效的HTML),而其他替代方法则不太可读。否则,请使用<input checked>它,因为它更短。


2
我决定回滚以编辑2,并首先保留规范。虽然“示例”首先是一般的做法,但我认为这是该答案与仅给出示例的当前最佳答案不同的方面。不过感谢您的建议:-)
西罗·桑蒂利

2
我认为这是正确的答案,强调缺席意味着错误。虽然=“ true”有效,但这意味着=“ false”可以按预期工作,但不起作用。
aamarks

35
<input ... checked />
<input ... checked="checked" />

这些同样有效。在JavaScript中:

input.checked = true;
input.setAttribute("checked");
input.setAttribute("checked","checked");

4
setAttribute修改DOM 标记,无需分配属性。
user2864740

input.setAttribute("checked")TypeError:无法在'Element'上执行'setAttribute':需要2个参数,但只有1个参数
Ivan Rave

@IvanRave某些浏览器对此有些痴迷,其他浏览器会正常工作。
Niet the Dark Absol


5
  1. 已检查
  2. 已选中=“”
  3. 检查=“检查”

    等价


根据规范复选框 '----ⓘchecked=“ checked”或“”(空字符串)或为空指定该元素表示所选控件。---


2

这是一个非常疯狂的小镇,使checked false的唯一方法是忽略任何值。使用Angular 1.x,您可以执行以下操作:

  <input type="radio" ng-checked="false">

如果您需要取消选中它,这会更加理智。


2

我认为这可能会有所帮助:


首先阅读Microsoft和W3.org的所有规范。
您会看到,需要在ELEMENT PROPERTY而不是UI或属性上完成复选框实际元素的设置。
$('mycheckbox')[0].checked

其次,您需要知道,选中的属性RETURNS包含字符串“ true”,“ false”,
为什么这很重要?因为您需要使用正确的Type。一个字符串,而不是布尔值。这在解析复选框时也很重要。
$('mycheckbox')[0].checked = "true"

if($('mycheckbox')[0].checked === "true"){ //do something }

您还需要认识到“选中的”属性是用于初始设置复选框的值的。一旦将元素呈现到DOM,这并不会做很多事情。想象一下在网页加载和最初解析时该工作方式。
在这方面,我将遵循IE的偏好:<input type="checkbox" checked="checked"/>

最后,对于复选框的困惑的主要方面是,复选框UI元素与元素的属性值不同。它们不直接相关。如果在.net中工作,您会发现用户“选中”复选框永远不会反映传递给控制器​​的实际布尔值。要设置用户界面,请同时使用$('mycheckbox').val(true);$('mycheckbox').attr('checked', 'checked');


简而言之,对于选中的复选框,您需要:
初始DOM:<input type="checkbox" checked="checked">
元素属性:$('mycheckbox')[0].checked = "true";
UI:$('mycheckbox').val(true);$('mycheckbox').attr('checked', 'checked');


-3

好吧,我认为使用它并不重要(类似于禁用和只读),我个人使用checked =“ checked”,但是如果您尝试使用JavaScript操作它们,则使用true / false


5
号这件事(它事项不disabledreadonly也),即使浏览器的错误恢复是相当不错的。如果要使用JS 处理属性,则仍应使用checkedremoveAttribute('checked')。该checked 特性需要truefalse
昆汀2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.