我正在尝试在HTML表单中实现一个可选择用户首选项的页面,如果选中了复选框 ALL ,则所有子复选框 base1 ,<自动检查em> base2 和 base3 ,如果取消选中任何子复选框,则必须取消选中复选框 ALL 。我使用了一个javascript函数,但是当我提交表单时,只发送了复选框数组中的最后一个变量。
<SCRIPT LANGUAGE="JavaScript">
function checkChoice(field, i) {
if (i == 0) { // "All" checkbox selected.
if(field[0].checked==true) {
for (i = 1; i < field.length; i++)
field[i].checked = true;
}
}
else {
if (field[i].checked == false) {
field[0].checked = false;
}
}
}
<form name="form" method = "POST" action="preferences.php">
<input type=checkbox name=classes1 value="allbases" onclick="checkChoice(document.form.classes1, 0)">All bases
</td><td>
<input type=checkbox name=classes1 value="base1" onclick="checkChoice(document.form.classes1, 1)">Base1
<br>
<input type=checkbox name=classes1 value="base2" onclick="checkChoice(document.form.classes1, 2)">Base2
<br>
<input type=checkbox name=classes1 value="base3" onclick="checkChoice(document.form.classes1, 3)">Base3
<input type="submit" value="Set preferences" >
如果我调用“classes1 []”中的复选框名称,则所有值都会被提交,但javascript函数不再起作用。有没有办法解决这个问题? 谢谢你的帮助。
答案 0 :(得分:0)
所有的值实际上都是提交的,但PHP每次都会覆盖$ _POST ['classes1'],直到你只剩下最后一个值。但是,如果您在输入名称中添加“[]”,则会将它们添加到数组中。
由于后者会导致javascript出现问题,你能不能这样做 a)迭代form.elements数组中的所有表单元素, 或者b)给每个输入一个唯一的id并使用document.getElementById()来查找它?
答案 1 :(得分:0)
有关checkChoice
的替代方法:请检查this SO question以及我在那里提供的jsfiddle。
[编辑]:一些额外的想法会带你到this solution