为什么我没有在复选框中获得检查值?

时间:2010-05-21 06:29:43

标签: php javascript checkbox

我有一个复选框。当检查框时,相应的ID被放入文本框中。但是,当数据库中只有一个值时,我无法获得检查值。你能告诉我为什么吗?这是我的代码:

<? if(isset($AcceptFriend)) {?>
<form action="<?=site_url()?>friends/Accept_Friend" name="orderform" id="orderform" method="post" style="background:#CCCC99">
<input type="text" name="chId" id="chId" >
<table  border="0" height="50%" id="chkbox" width="50%" >
<tr>
<? foreach($AcceptFriend as $row)
{?>
<tr>
<td>Name</td><td><?=$row['dFrindName'].'</br>';?></td>
<td> <input type="checkbox" name="checkId" id="checkId" value="<? echo  $row['dMemberId']; ?>" onClick="get_check_value()" ></td>
</tr>

<? }}?>
</tr>
 <tr> <td width="10px"><input type="submit" name="submit" id="submit" class="buttn" value="AcceptFriend"></td></tr>

</table>


</form>

这是我正在使用的脚本

function get_check_value()
{
    var c_value = "";

    for (var i=0; i < document.orderform.checkId.length; i++)
       {
       if (document.orderform.checkId[i].checked)
          {
          c_value = c_value + document.orderform.checkId[i].value + "\n";
          }
       }
       alert(c_value);
       document.getElementById('chId').value= c_value;
}

3 个答案:

答案 0 :(得分:3)

如果您使用ID一次,document.orderform.checkId.length的返回值将为您提供该对象的属性数,因为document.orderform.checkId将是该单个对象。

在你的循环中,你将走过所有这些属性,并要求他们在他们的财产“检查”。因为它们没有该属性,您将收到错误,并且您的脚本将失败。

当多次使用ID时,document.orderform.checkId将成为该ID的所有对象的数组,长度将返回它们的数量。

在这种情况下,您的循环将按照您的意图走过所有复选框。

最好的解决方案是使用document.getElementsByName('checkId')或添加一个隐藏的虚拟复选框,通过以i = 1而不是i = 0开始循环将忽略该复选框;

由于ID应该是唯一的,我建议更改脚本以使用name属性并使用document.getElementsByName('checkId'),它将始终返回一个数组。

答案 1 :(得分:0)

你应该给你的复选框一个类似数组的名字属性:“checkId []” 并且每个复选框的ID属性应该不同,checkId14或稍后可以跟踪的任何内容。

答案 2 :(得分:-3)

Andr是对的,你最好不要为了一个健康的批评而贬低一个人 - 他的答案可能无法解决你的问题,但是html id应该具有唯一的价值,类标识符可以具有相同的名称。