我有一个复选框。当检查框时,相应的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;
}
答案 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应该具有唯一的价值,类标识符可以具有相同的名称。