当我提交带有选中复选框但没有明确定义value
的HTML表单时,Chrome会将on
作为该字段的值发送。
这是标准行为吗?或者我对其他浏览器有什么期望?
答案 0 :(得分:25)
HTML 4.01规范未指定已选中复选框的值。它只是说它是“开启”,但这只是散文,并没有说明默认值是什么。但它也说(在description of the input
element下)在这种情况下需要value
属性。
所以<input type=checkbox name=foo>
在使用的值方面有未定义的行为,但实际上浏览器使用value=on
作为默认值。
答案 1 :(得分:9)
HTML Living Standard 反映了这一点:该值处于“默认/开启”模式,这意味着如果未提供值属性,则其值为“on
”。来自4.10.7.1.16 Checkbox state (type=checkbox) - HTML
Living Standard (Sep 2013):
- 值IDL属性处于模式default/on。
[...]
默认/上强>
获取时,如果元素具有value
属性,则必须返回该属性的值;否则,它必须返回字符串“on
”。在设置时,必须将元素的value
属性设置为新值。
这也是另一个HTML规范的一部分, W3C HTML 2013年8月5日建议规范 也有这个:
供我参考之前的评论:
Firefox(2013年9月),Chrome(2013年9月),Internet Explorer(6):“on”。我怀疑这可以追溯到很久。 http://lxr.mozilla.org/classic/source/lib/layout/layform.c#86 - 由于大多数浏览器需要为自己的代码对象设置一些默认值,我猜这个“开启”只是常见的。
答案 2 :(得分:2)
浏览器仅在选中时才会发送复选框的值(在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
}