【问题标题】:HTML: Checkbox default valueHTML:复选框默认值
【发布时间】:2012-10-06 09:08:42
【问题描述】:

当我提交带有选中复选框但没有明确定义 value 的 HTML 表单时,Chrome 会发送 on 作为该字段的值。

这是标准行为吗?或者我可以从其他浏览器中得到什么?

【问题讨论】:

  • 是的,它是标准的!选中的值将在每个浏览器中on
  • @BhuvanRikka:你有参考吗?
  • 检查了它但徒劳无功。找不到。只是根据自己的经验说

标签: html cross-browser


【解决方案1】:

浏览器只有在选中时才会发送复选框的值(在 POST 数据中)。只需检查 POST 数据中是否存在特定复选框的值(任何值)即可。

即

// no need to check against 'on', 'true', '1' etc..
if(post data contains a value for checkbox1) {
    // checkbox 1 is checked
}
else {
    // not checked
}

【讨论】:

  • 之所以提到,是因为实际值无关紧要,理想情况下不应检查。
  • 即使在 2012 年单页应用程序也很流行,使您的评论无效,我们不会以这种方式将实际的表单帖子发送到浏览器,我们有时希望获得复选框的值。
【解决方案2】:

HTML 4.01 规范没有指定选中复选框的值。它只是说它是“on”,但这只是散文,并没有说明默认值是什么。但它也说(在description of the input element 下)在这种情况下需要value 属性。

所以<input type=checkbox name=foo> 对于所使用的值有未定义的行为,尽管实际上浏览器使用value=on 作为默认值。

【讨论】:

  • 根据 HTML 5,如果浏览器通过 DOM/IDL 访问值(或者如果浏览器创建 DOM 并授予对值的访问权限,例如 javascript),则行为不是未定义的,但已定义。那么该值为“on”。过去在 HMTL DOM 中未指定此细节,因为 IDL 没有详细说明此案例。在实践中,当你写这篇文章时,技术上总是如此,但仍未定义。 stackoverflow.com/a/19094549/367456 - 过去通常需要有效的 HTML 来编写该属性(例如 HTML 2.0),因为 HTML 5 不再需要。
【解决方案3】:

HTML 生活标准 反映了这一点:该值处于“默认/开启”模式,这意味着如果没有提供 value 属性,它的值为“on”。来自4.10.7.1.16 Checkbox state (type=checkbox) - HTML Living Standard (Sep 2013):

[...]

默认/开启
获取时,如果元素具有value 属性,则它必须返回该属性的值;否则,它必须返回字符串“on”。在设置时,它必须将元素的value 属性设置为新值。

这也是另一个 HTML 规范的一部分,W3C HTML 2013 年 8 月 5 日推荐规范也有这个:


供参考我之前的评论:

Firefox(2013 年 9 月)、Chrome(2013 年 9 月)、Internet Explorer(6):“开启”。我怀疑这可以追溯到很久以前。 http://lxr.mozilla.org/classic/source/lib/layout/layform.c#86 - 因为大多数浏览器需要为自己的代码对象设置一些默认值,我猜这个“on”很常见。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多