启用和禁用文本框数组由复选框


Enable and Disable array of textBoxes by check boxes

我一直在研究这段代码!我做不好.

我想要的是选中相应的复选框时启用文本框。但是当应用该功能时,没有任何反应:(

在我的代码中,文本和复选框是使用 PHP 从数据库动态生成的。这是我的代码:

<div><div class="ac-container">
<div id="accordion">
<?php
$qry="SELECT * FROM catalog";
$result= mysql_query($qry);
if($result){
while($info = mysql_fetch_array($result))
{
print "<h3><a href='"'#'"> cat:".$info['name']."</a></h3><div>";
$qryitem="SELECT * FROM item WHERE Id=". $info['Cid'];
$resultitem=mysql_query($qryitem);
if($resultitem){
?>
<form name="form1" id="form" method="post" action="manage_item_action.php"  >
<?php
while($info=mysql_fetch_array($resultitem))
{
?>
<input type="checkbox"  id="checkB" name="op[]" value="<?php echo $info['Id'];?>" />   <?php echo $info['name'];?>
<label> Quantity <input disabled="disabled" id="textB" type="text" 
name="Quantit[]" value="<?php echo $info['Quantity'];?>"/>
</label>
<script>

 checkBoxes=document.form1.elements['op[]'];
 textBoxes=document.form1.elements['Quantit[]'];
 for(var i=0 ; i<checkBoxes.length;i++){
 checkBoxes[i].onchange = function() {
 textBoxes[i].disabled =!(this.checked);};

 }
 </script>

<br/>
        <?php
        } 
    }

 else echo "There are no items.";
 print "</div>";

}
}

?>
</div>
<input type="submit" value="update" name="submit"/>
<input type=reset value="clear"></td></tr> </form>

您遇到的问题是在事件处理程序中未定义变量i。要解决此问题,您可以向每个复选框添加一个属性以保存它们所引用的索引:

checkBoxes=document.form1.elements['op[]'];
textBoxes=document.form1.elements['Quantit[]'];
for(var i=0 ; i<checkBoxes.length;i++)
{
    checkBoxes[i].myIndex = i;
    checkBoxes[i].onchange = function() {
        textBoxes[this.myIndex].disabled =!(this.checked);
    };
}

解决此问题的其他方法:http://www.howtocreate.co.uk/referencedvariables.html

你的代码仍然很混乱。例如,您在第一个 print -语句中生成了太多的结束<div/> -标记。我建议你从你的问题中删除PHP代码,因为这个问题只与html和javascript有关。

我还建议使用库来操作 DOM 元素,如 jQuery。

在编写和调试 javascript 时,应始终确保收到错误消息。"什么也没发生"表明你只是忽略了错误。对于火狐浏览器,请下载插件Firebug。Safari 还具有可以在设置中激活的开发人员工具。使用这些工具将非常容易地发现和解决此类问题。