【问题标题】:What's the proper value for a checked attribute of an HTML checkbox?HTML 复选框的选中属性的正确值是什么?
【发布时间】:2011-12-12 16:55:35
【问题描述】:

我们都知道如何在 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">

答案是否无所谓?我没有看到 spec 本身的答案标记为正确 here 的证据:

复选框(和单选按钮)是可以切换的开/关开关 由用户。选中控制元素时,开关处于“打开”状态 属性已设置。提交表单时,仅“打开”复选框 控制可以变得成功。表单中的多个复选框可以共享 相同的控件名称。因此,例如,复选框允许用户 为同一属性选择多个值。使用 INPUT 元素 创建一个复选框控件。

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

【问题讨论】:

  • 在您的问题摘要中,您提到了选中属性的值,但是在问题描述中,您讨论了选中复选框的正确值。复选框的“值”与选中的属性不同,我相信您的问题描述也意味着属性的值,也许您想调整问题描述。对于复选框的“价值”,请查看stackoverflow.com/questions/14323899/…

标签: html forms checkbox html-input


【解决方案1】:

严格来说,你应该放一些有意义的东西——根据规范here,最正确的版本是:

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

对于 HTML,您还可以使用 empty attribute syntaxchecked="",甚至可以简单地使用 checked(对于更严格的 XHTML,这是 not supported)。

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

<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" 上的类似问题。

【讨论】:

  • 这是错误的。如果您查看the spec,它会显示:checked (checked),这意味着“选中的属性可以具有值'checked')。只有checked 是可接受的值,其他都不是。Boolean attributes 允许您省略所有除了值,因此checkedchecked="checked" 都是可以接受的。
  • 一个面向 HTML5 的 W3 页面显示 checkedchecked=""checked="checked" 都可以。 w3.org/TR/html-markup/input.checkbox.html
  • @Quentin 抱歉,这句话对我来说没有意义。您的意思是您可以省略除属性名称之外的所有内容吗?因为如果你可以省略除了 value 之外的所有内容,你可以简单地写 "checked",不带属性名称,并让它正常工作。
  • @Quentin tl,dr:这是语义,但empty attribute syntax 仅指定属性的名称,而不指定。跨度>
  • 如果复选框保持选中状态(重新加载页面时)尽管省略boolean / empty attributechecked,请使用autocomplete="off" 保留您的浏览器自动检查它。
【解决方案2】:

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",因为 &lt;input checked&gt; 是无效的 XHTML(但有效的 HTML)并且其他替代方案的可读性较差。否则,只需使用 &lt;input checked&gt;,因为它更短。

【讨论】:

  • 我决定回滚编辑 2 并首先保留规范。虽然首先示例是一般要走的路,但我认为这是该答案与当前仅提供示例的顶级答案不同的方面。不过感谢您的建议:-)
  • 我认为这是正确的答案,强调缺席意味着错误。虽然 ="true" 有效,但这意味着 ="false" 会按预期工作,但不会。
【解决方案3】:
<input ... checked />
<input ... checked="checked" />

这些同样有效。在 JavaScript 中:

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

【讨论】:

  • setAttribute 修改 DOM markup,属性赋值不需要。
  • input.setAttribute("checked") TypeError: 无法在“元素”上执行“setAttribute”:需要 2 个参数,但只有 1 个存在
  • @IvanRave 一些浏览器对此很迂腐,但其他浏览器可以正常工作。
【解决方案4】:

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

【讨论】:

    【解决方案5】:
    1. 已检查
    2. checked=""
    3. checked="checked"

      等价的;


    根据规范checkbox '----ⓘ checked = "checked" or "" (空字符串) or empty 指定该元素代表一个选定的控件。---'

    【讨论】:

      【解决方案6】:

      让checked为false的唯一方法就是忽略任何值,这真是太疯狂了。使用 Angular 1.x,您可以这样做:

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

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

      【讨论】:

        【解决方案7】:

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


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

        其次,您需要注意选中的属性返回字符串“true”、“false”
        为什么这很重要?因为你需要使用正确的类型。字符串,而不是布尔值。这在解析复选框时也很重要。
        $('mycheckbox')[0].checked = "true"

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

        您还需要意识到“已选中”属性最初用于设置复选框的值。一旦元素被渲染到 DOM,这并没有多大作用。想象一下当网页加载并最初解析时这个工作。
        我会选择 IE 对这个的偏好:&lt;input type="checkbox" checked="checked"/&gt;

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


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

        【讨论】:

          【解决方案8】:

          就像所有输入一样,这个也有一个“值”属性。如果您将value 属性与name 属性一起设置,它将在标头中发送${name}=${value}。假设我们有一个包含一堆东西的表单,我们希望用户决定他们拥有什么角色,我们可以使用一个复选框。最简单的方法是设置将传递给服务器的“值”属性。像这样:

          <form action="/server" method="post">
              <label>Are you a person?</label>
              <input type="checkbox" name="my_checkbox" value="is_person">
          </form>
          

          服务器将收到以下信息: my_checkbox=is_person 但仅当复选框被选中时。这将是 my_checkbox= 如果它是空的。

          这与radio 输入完全相同。

          但是..我感觉这不是您要的...所以请附上我将在下面写另一个答案:

          如果checked 属性设置为任何值(甚至false),无论如何它都会被激活。 checked 属性没有指定值,如果设置为任何值,它将默认为“true”(即使您将其设置为 false)。

          例如:

          <form action="/server" method="post">
              <label>Are you a person?</label>
              <input type="checkbox" checked="false"> <!--Still checked-->
          </form>
          

          即使设置为 false 也会被检查。

          <form action="/server" method="post">
              <label>Are you a person?</label>
              <input type="checkbox" checked="asjdiasjiasdjoasi"> <!--Still checked-->
          </form> 
          

          这样做也会检查它。没关系——只要设置了就会被检查。

          希望这能回答您的问题,无论属性的值如何,checked 属性都会检查输入。

          你可以在这里测试它:https://battledash-2.github.io/Live-IDE/ 或 repl.it 之类的任何地方,或本地。

          【讨论】:

            【解决方案9】:

            选中复选框的技术正确值为零 (0),当未选中复选框时,它的索引未定义。

            【讨论】:

              【解决方案10】:

              好吧,我认为使用它并不重要(类似于 disabled 和 readonly),我个人使用 check="checked" 但如果您尝试使用 JavaScript 操作它们,则使用 true/false

              【讨论】:

              • 没有。即使浏览器错误恢复非常好,它也很重要(对disabledreadonly 也很重要)。如果你想用 JS 操作 属性 那么你仍然应该使用checkedremoveAttribute('checked')checked 属性 采用 truefalse
              猜你喜欢
              • 1970-01-01
              • 2020-05-22
              • 1970-01-01
              • 2011-02-21
              • 2023-03-05
              • 2012-09-23
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多