27

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

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

4

3 回答 3

28

HTML 4.01 规范没有指定选中复选框的值。它只是说它是“打开”的,但这只是散文,并没有说明默认值是什么。但它也说(在element的描述下inputvalue在这种情况下需要该属性。

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

于 2012-10-16T12:52:56.820 回答
9

HTML 生活标准on反映了这一点:该值处于“默认/开启”模式,这意味着如果没有提供 value 属性,它的值为“ ”。从4.10.7.1.16 复选框状态(类型=复选框)-HTML 生活标准(2013 年 9 月)

[...]

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

这同样也是另一个 HTML 规范的一部分,W3C HTML 5 Aug 2013 Recommendation Specification也有这个:


供参考我之前的评论:

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

于 2013-09-30T12:40:48.903 回答
3

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

IE

// 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-10-16T09:45:18.150 回答