Html 为什么我们不能发布未选中的复选框?

Html 为什么我们不能发布未选中的复选框?,html,post,checkbox,Html,Post,Checkbox,我有一个大约有80个复选框的表单,默认情况下所有复选框都将被选中。用户只会取消选中不需要的项目,因此我在帖子中查找未选中的复选框元素。但是,POST仅保存选中值 在搜索了一点之后,我找到了一个解决我的情况的方法: 解决办法: <form> <input type='hidden' value='0' name='selfdestruct'> <input type='checkbox' value='1' name='selfdestruct'> &l

我有一个大约有80个复选框的表单,默认情况下所有复选框都将被选中。用户只会取消选中不需要的项目,因此我在
帖子中查找未选中的复选框元素。但是,
POST
仅保存选中值

在搜索了一点之后,我找到了一个解决我的情况的方法:

解决办法:

<form>
  <input type='hidden' value='0' name='selfdestruct'>
  <input type='checkbox' value='1' name='selfdestruct'>
</form>

利用这一点,我可以得到隐藏字段的值,从而实现我的目的

但是重要的问题是为什么这不是一个默认功能?我已经为任何第一次听起来很奇怪的技术问题找到了合理的理由。但对于这一点(不能张贴未选中的复选框),我仍然好奇地想知道原因

如果有人能解释一下这个主题,我将不胜感激。

W3C只提交“成功”的控件

成功的控件对于提交是“有效的”

  • 所有“打开”复选框都可能成功

同样,对于单选按钮,只有“打开”单选按钮是“成功的”,对于菜单,只有选定的选项是“成功的”。

未选中的复选框不会在POST数据中发送。您只需检查它是否为空:

if (empty($_POST['field1']))
     ....
else
     ....
您还忘记在字段中添加正确的
名称
id
。添加此选项将使检查更容易

<input type='hidden' value='0' name='field1' id="field1" >


您试图将一个正方形挤压成一个圆形。这不是用于复选框的用法,您应该改为使用
单选
类型。要切换,可能我必须用两个单选按钮替换每个复选框。我确信复选框正是我所需要的:)@OrelEraki复选框可以用于此目的。您只需更改在服务器端检查它们的方式。@GolezTrol,的确,它们很好,但如果他想发送True或False,我建议他使用不同的方法。该链接很有用。选择“无”时单选按钮如何?我们仍然可以认为它们是“有效的”提交吗?如果是,为什么要对复选框进行特殊处理?对于单选按钮也是一样的。如果未选择“无”,则不会过帐该值。与其他控件一样,复选框有一个当前值。对于输入,可以键入该值。对于
选择
s,您可以通过
选项
选择该值。对于复选框,当前值由
value
属性确定。复选框没有两个值(一个用于选中,一个用于未选中),但它只有一个值,该值是否被过账取决于复选框是否被选中。服务器脚本应该知道有哪些复选框,并且任何未发布的名称都不会被隐式选中。当您有一组单选按钮,其中没有选中任何复选框时,这不是“成功”的,也不会提交任何与此相关的内容。我喜欢您在引号之间添加“有效”的方式。我真的希望这个异常将在HTML6中修复。。。未选中的复选框与已选中的复选框一样有效。基于假设销毁数据是一个糟糕的想法。问题中的输入已经有了名称。id与发布表单无关。它不是强制性的,但在应用某些javascript时很有用。当然,但问题只是发布表单,您声称id被“遗忘”,这是不正确的。所以关于ids的评论给你的答案增加了噪音,实际上使它变得不正确。很遗憾,因为你问题的第一部分很有用。