我要求未选中复选框的值为“0”,以便我可以确定哪些值已被选中以及所有值(选中+未选中)都将被发布($_POST['chk])。我正在使用 for 循环来创建复选框,并生成一个值为“0”的隐藏字段(如 stackoverflow 上建议的 elsewhere )。
有 4 个复选框 ((count($result)-1) = 4),当选中复选框 1 和 3,而取消选中复选框 2 和 4 时,$_POST['chk'] 数组最终如下所示:
Array
(
[chk] => Array
(
[0] => 0
[1] => 180.00
[2] => 0
[3] => 0
[4] => 100.00
[5] => 0
)
我希望它看起来像这样:
Array
(
[chk] => Array
(
[0] => 180.00
[1] => 0
[2] => 100.00
[3] => 0
)
我做错了什么?使用 for 循环和隐藏的复选框字段是否可以实现这一点?
Javascript:
<script type="text/javascript">
function calculate() {
var el, i = 0;
var subtotal = 0;
while(el = document.getElementsByName("chk[]")[i++]) {
if(el.checked) { subtotal = subtotal + Number(el.value);}
}
var node = document.getElementById("subtotal");
node.innerHTML = "$" + subtotal + ".00";
var node = document.getElementById("total");
node.innerHTML = "$" + (subtotal*<?=$no_nights?>) + ".00";
}
</script>
HTML/PHP:
<form id="booking_step2" name="booking_step2" method="POST" action="index.php?p=bookings?s=3">
<? for ($x=0; $x<=(count($result)-1); $x++) { ?>
<input type="hidden" name="chk[]" value="0">
<input type="checkbox" name="chk[]" value="<?=$result[$x]['r_rate'];?>" onclick="calculate()">
<? } ?>
最佳答案
您错误地使用了 chk[]
作为控件的名称。这将为每个未选中的框提供 $_POST
内的一个元素,但为每个选中的框提供两个元素。并且额外的元素可能出现在数组内的任何位置,因此您将无法理解它。
取而代之的是,为每对隐藏输入和复选框显式指定相同的索引:
<? for ($x=0; $x<=(count($result)-1); $x++): ?>
<input type="hidden" name="chk[<?=$x?>]" value="0">
<input type="checkbox" name="chk[<?=$x?>]" value="<?=$result[$x]['r_rate'];?>">
<? endfor; ?>
执行此操作后,复选框将具有与其前面的隐藏输入完全相同的名称chk[N]
,因此它将简单地胜过该值,而不是在末尾添加另一个值数组。
关于javascript - php获取未选中复选框的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25633566/