<div id="test"> 
<input type=checkbox> 
<input type=text style="visibility:visible;"> 
<br> 
<input type=checkbox> 
<input type=text style="visibility:hidden;"> 
<br> 
</div> 
<script language=javascript> 
window.onload=function(){ 
var chktxt=document.getElementById("test").getElementsByTagName("input");
for(i=0;i <chktxt.length/2;i++){ 
(function(i){
chktxt[i*2].onclick=function(){ chktxt[i*2+1].style.visibility= this.checked ? "visible" : "hidden"; }
})(i)


</script>  

解决方案 »

  1.   

    <div id="test"> 
    <input type=checkbox> 
    <input type=text style="visibility:visible;"> 
    <br> 
    <input type=checkbox> 
    <input type=text style="visibility:hidden;"> 
    <br> 
    </div> 
    <script language=javascript> 
    window.onload=function(){ 
        var chktxt=document.getElementById("test").getElementsByTagName("input");
        for(i=0;i <chktxt.length/2;i++){ 
            (function(i){
            chktxt[i*2].onclick=function(){ chktxt[i*2+1].style.visibility= this.checked ? "visible" : "hidden"; }
            })(i)
        } 

    </script>  
      

  2.   

    加分啊。
    错误的原因是schk和stxt是变量,两个click事件都被添加,但第一个checkbox的click事件中的schk和stxt分别是第三和第四个input,而点击第一个checkbox的时候第二个checkbox的checked不会变,所以没有反应(你可以加alert验证我说的是否正确)。
    楼上二位都是正确的,但依然有缺点——chktxt也还是全局的变量,如果在其他地方改变,结果也依然会错。
    还有:我只知道二位的意思,却不知道尾部的“(i)”是什么意思。二位请解释下。楼主,不知道你干吗那样写,这样写不好吗(或者干脆用id岂不更好)?
    <div id="test"> 
    <input onclick="xxx(0)" type=checkbox> 
    <input type=text style="visibility:visible;"> 
    <br> 
    <input type=checkbox> 
    <input onclick="xxx(1) type=text style="visibility:hidden;"> 
    <br> 
    </div> 
    <script language=javascript> 
       function xxx(i){
          var chktxt=document.getElementById("test").getElementsByTagName("input");
          var schk=chktxt[i*2];
          var stxt=chktxt[i*2+1]; 
        
          if(schk.checked)
              stxt.style.visibility="visible";
          else
              stxt.style.visibility="hidden"; 
       }
    </script>  
      

  3.   

    两个checkbox触发点击事件时执行{if(schk.checked)stxt.style.display="block"; else stxt.style.display="none";} ,这时 schk的值是第二个checkbox,stxt的值是第二个text input
    一直没有第一个text input什么事,你可以alert(this.id)、alert(schk.id)、 alert(stxt.id)看看
      

  4.   

    因为这个CHECKBOX和INPUT都是动态生成的,只能通过查找的方式进行添加响应函数
      

  5.   

    function(){}()这个是什么结构,为什么你在外面 加了一个function(i)就可以了?
      

  6.   

    明白了,我的写法跟一楼的虽然都一样是闭包,但我的只保存了i的一个值,不能适用于所有响应事件,再嵌套一个function保留每一个事件的i的值,就可以了,