未选中复选框时发布复选框值[重复]

Posted

技术标签:

【中文标题】未选中复选框时发布复选框值[重复]【英文标题】:Post checkbox values when checkbox isn't checked [duplicate] 【发布时间】:2013-05-21 07:20:14 【问题描述】:

如何将复选框 POST 关闭,例如,当它没有被选中时,因为复选框仅在它被选中并且我不想使用隐藏变量时才提交值

谢谢

【问题讨论】:

隐藏变量有什么问题? ***.com/questions/1809494/… 无论如何都发送了,我无法追踪哪个复选框是选中的,例如,如果没有选中任何框,我的复选框数组是 0=>off, 1=>off, 2=>off, 3 =>off 但是如果选中一个框,它将是 0=>off, 1=>on, 2=>off, 3=>off, 4=>off 我正在使用这些索引来初始化另一个变量.. if 0 act=create elseif (1) act=delete 等等..如果复选框未知,那么我将无法正确初始化我的变量..有什么想法吗? 这显然适用于服务器而不是客户端。你不应该依赖 javascript 告诉你的服务器哪些复选框没有被选中(通常浏览器不会告诉你)。由于您的服务器正在传递表单,因此您应该知道预期的响应是什么。 @DaveChen,这就是我想要做的。如果不使用隐藏变量并扩展我的复选框数组,我不知道如何知道是否未选中该框。如果您有任何想法,请告诉我。谢谢 我的回答是:不要使用隐藏值,您依赖客户端输入进行服务器操作。你需要知道你期望服务器端从什么开始。 【参考方案1】:

简短的回答是浏览器不会发送未选中的复选框。但一种可能的解决方法是在 php 端设置一个默认数组

所以对于包含像

这样的字段的表单
<input type='checkbox' name='checkbox[a]' value='1'/>
<input type='checkbox' name='checkbox[b]' value='1'/>
<input type='checkbox' name='checkbox[c]' value='1'/>

你会说

$checkbox_defaults = array(
   "a" => 0,
   "b" => 0,
   "c" => 0
);

然后在 PHP 上说

$_POST["checkbox"] = array_merge($checkbox_defaults, $_POST["checkbox"]);

注意这仅适用于字符串索引数组...如果您需要使用数字索引数组,php 应该如下所示。

$checkbox_defaults = array(
   0 => 0,
   1 => 0,
   2 => 0
);
foreach($checkbox_defaults as $k=>$v)
    $_POST["checkbox"][$k] = (isset($_POST["checkbox"][$k])?
                             $_POST["checkbox"][$k]:$v);

【讨论】:

+1 NICE 解决方案;). 值得注意的是,这种技术不适用于非字符串键索引数组。数字索引数组,您将获得默认值 AND 选中的数组。 谢谢!但是我的数组是数字索引的,我不想返回两个值......我需要一种方法来只返回检查和未检查的值..有什么想法吗? 我会使用隐藏变量,但它的作用相同.. 发送检查值和隐藏值.. 如果您对复选框的name 属性类似于name='checkbox[],那么您唯一可以真正依赖的就是不同的值。如果您在名称属性name='checkbox[1] 中放入数字索引,那么有一些希望......我会更新这个用例的答案。

以上是关于未选中复选框时发布复选框值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如果未选中复选框,如何提交 0,如果在 HTML 中选中复选框,如何提交 1 [重复]

未选中 POST PHP 时复选框不保存 [重复]

复选框值不能基于选中或使用jquery取消选中来更改[重复]

如果 AJAX 错误,请取消选中复选框 [重复]

PHP jquery设置复选框值,如果选中或未选中并发布

如何使用jquery ajax检查或不检查复选框[重复]