Checkbox 和 Hidden 都传递值,即使选中或不选中复选框
Checkbox and Hidden both passing value even if checkbox is checked or not
我有以下代码用于从复选框传递值。
echo "<input type='hidden' name='cash[]' value='Non Cash' />";
echo "<td><input type= 'checkbox' name = 'cash[]' value='Cash'/></td>";
但是当我提交表单时,隐藏类型的值会通过,即使我选中了复选框或没有。例如,如果我像下面这样选中复选框,现金数组将包含来自隐藏类型的值以及来自选中复选框的值。
image of checked checkbox in a html form
array showing data from both hidden and checkbox
那么,如果在 cash 数组中选中复选框,我是否可以避免隐藏类型的值?
非常感谢你提前。
修改 PHP 使其有效(将隐藏输入移动到相同的 table 单元格)您可以尝试一些简单的 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>";
我有以下代码用于从复选框传递值。
echo "<input type='hidden' name='cash[]' value='Non Cash' />";
echo "<td><input type= 'checkbox' name = 'cash[]' value='Cash'/></td>";
但是当我提交表单时,隐藏类型的值会通过,即使我选中了复选框或没有。例如,如果我像下面这样选中复选框,现金数组将包含来自隐藏类型的值以及来自选中复选框的值。
image of checked checkbox in a html form
array showing data from both hidden and checkbox
那么,如果在 cash 数组中选中复选框,我是否可以避免隐藏类型的值?
非常感谢你提前。
修改 PHP 使其有效(将隐藏输入移动到相同的 table 单元格)您可以尝试一些简单的 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>";