0

我一直在研究这个代码!我做错了。

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

在我的代码中,文本和复选框是使用 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>
4

1 回答 1

0

您遇到的问题是在您的事件处理程序内部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

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

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

在编写和调试 javascript 时,您应该始终确保收到错误消息。“什么都没有发生”表明您只是忽略了错误。对于 Firefox 下载插件Firebug。Safari 也有可以在设置中激活的开发者工具。使用这些工具将使发现和解决此类问题变得非常容易。

于 2012-04-10T01:00:58.600 回答