即使复选框被选中,复选框和隐藏都传递值

问题描述

我有以下代码用于从复选框传递值

echo "<input type='hidden' name='cash[]' value='Non Cash' />";
echo "<td><input type= 'checkBox' name = 'cash[]' value='Cash'/></td>"; 

但是当我提交表单时,即使我选中复选框或不选中,隐藏类型的值也会通过。例如,如果我选中下面的复选框,cash 数组将包含来自隐藏类型以及选中复选框的值。

image of checked checkbox in a html form

array showing data from both hidden and checkbox

那么,如果在现金数组中选中复选框,我是否可以避免隐藏类型的值?

非常感谢您提前。

解决方法

通过修改 PHP 使其有效(将隐藏输入移动到同一个表格单元格),您可以尝试使用一些简单的 javascript 来禁用隐藏值(应该将其从 POST 数组中删除)

echo "<td>
    <input type='hidden' name='cash[]' value='Non Cash' />
    <input type='checkbox' name = 'cash[]' value='Cash'/>
</td>";

和 Javascript

<script>
    document.querySelectorAll('input[type="checkbox"][name="cash[]"]').forEach( input=>{
        input.addEventListener('click',function(e){
            this.previousElementSibling.disabled=this.checked;
        });
    })
</script>

我没有测试以上内容 - 请原谅可能的错误。

,

当您使用 [] 时,它会动态创建一个新的数组元素。您需要将它们与相同的索引配对。这样,当复选框排在第二位时,如果选中它,它将覆盖隐藏的输入:

echo "<input type='hidden' name='cash[0]' value='Non Cash' />";
echo "<td><input type='checkbox' name='cash[0]' value='Cash'/></td>";

echo "<input type='hidden' name='cash[1]' value='Something' />";
echo "<td><input type='checkbox' name='cash[1]' value='Something Else'/></td>"; 

您现在使用 [] 的方式将导致隐藏输入 $_POST['cash'][0] 和复选框 $_POST['cash'][1]。如果不需要多个同名的复选框,则根本不要使用数组:

echo "<input type='hidden' name='cash' value='Non Cash' />";
echo "<td><input type='checkbox' name='cash' value='Cash'/></td>"; 

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...