如何提交包含未勾选状态的checkbox数组?
解决数组形式复选框提交未勾选状态的问题
你遇到的问题根源在于用checkbox[]这种自动索引的数组名时,hidden和checkbox的同名参数会被全部追加到数组里,导致数量翻倍。要解决这个问题,核心是给每个复选框对指定固定的数组索引,让hidden和checkbox对应同一个索引,这样勾选时checkbox的值会覆盖hidden的默认值,未勾选时就保留hidden的值。
具体实现方式
给每个复选框组合设置带明确索引的name属性,比如checkbox[0]、checkbox[1],同时给hidden设置默认值(比如0代表未勾选),checkbox设置勾选后的值(比如1代表已勾选):
<!-- 第1个复选框 --> <input type="hidden" name="checkbox[0]" value="0"> <input type="checkbox" name="checkbox[0]" value="1"> <!-- 第2个复选框 --> <input type="hidden" name="checkbox[1]" value="0"> <input type="checkbox" name="checkbox[1]" value="1"> <!-- 第3到第5个以此类推 --> <input type="hidden" name="checkbox[2]" value="0"> <input type="checkbox" name="checkbox[2]" value="1"> <input type="hidden" name="checkbox[3]" value="0"> <input type="checkbox" name="checkbox[3]" value="1"> <input type="hidden" name="checkbox[4]" value="0"> <input type="checkbox" name="checkbox[4]" value="1">
效果说明
提交表单后,$_POST['checkbox']会是一个长度为5的数组:
- 未勾选的复选框对应的索引值是
0 - 勾选的复选框对应的索引值是
1
不会再出现冗余的参数,每个索引精准对应一个复选框的状态。
如果是动态生成的复选框(比如从数据库循环输出),只需要把索引换成循环变量即可,比如PHP里用$i循环:
<?php for ($i = 0; $i < 5; $i++) { ?> <input type="hidden" name="checkbox[<?= $i ?>]" value="0"> <input type="checkbox" name="checkbox[<?= $i ?>]" value="1"> <?php } ?>
内容的提问来源于stack exchange,提问作者pileup
相关产品推荐
相关产品推荐

