传递给php时从javascript数组中丢失变量

时间:2011-04-14 15:08:50

标签: php javascript html-form

我正在尝试在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函数不再起作用。有没有办法解决这个问题? 谢谢你的帮助。

2 个答案:

答案 0 :(得分:0)

所有的值实际上都是提交的,但PHP每次都会覆盖$ _POST ['classes1'],直到你只剩下最后一个值。但是,如果您在输入名称中添加“[]”,则会将它们添加到数组中。

由于后者会导致javascript出现问题,你能不能这样做 a)迭代form.elements数组中的所有表单元素, 或者b)给每个输入一个唯一的id并使用document.getElementById()来查找它?

答案 1 :(得分:0)

有关checkChoice的替代方法:请检查this SO question以及我在那里提供的jsfiddle

关于你的评论的

[编辑]:一些额外的想法会带你到this solution