为了账号安全,请及时绑定邮箱和手机立即绑定

在一个FOR循环里,odiv[this.index]为何不能写成odiv[i]

有点绕不出来了 解答

    window.onload = function ()
    {
      var oli = document.getElementsByTagName("li");
      var odiv = document.getElementsByTagName("div");
      for(var i=0;i<oli.length;i++)
        {
          oli[i].index = i;
          oli[i].onclick = function()
          {
            for(var j=0;j<oli.length;j++)
              {
                oli[j].className = "";
                odiv[j].className = "hidden";
              } 
            this.className = "on";
            odiv[this.index].className = "";
          }
        }
    }

odiv[this.index].className = "";
 写成 odiv[i].className = ""; 就提示找不到这个odiv[i],不是仍然是在FOR循环里面吗

正在回答

3 回答

涉及闭包,楼主慢慢来初学者都会碰到这那的问题,要有耐心。

for(var i=0;i<oli.length;i++){

oli[i].index=i;//给每个li增加一个下标属性,使用这个方法,那么接下来的闭包可以值接使用下标找目标。

......

}下面接着写了一个闭包

oli[i].onclick=function(){

......

odiv[this.index].className()//这里this.index是直接使用上面的下标方属性。

}

如果使用odiv[i]那么此时的i不是012345....下标,而是http://img1.sycdn.imooc.com//56d7184c0001ade702440123.jpg这样一段代码了,你可以alert(i)就知了。

1 回复 有任何疑惑可以回复我~


window.onload = function() {
    	var a=document.getElementById("ul1");
    	var b=a.getElementsByTagName("li");
     	var c=document.getElementById("div1");
     	var d=c.getElementsByTagName("div");
     	for(var i=0;i<b.length;i++){
    		b[i].index=i;
    		b[i].onmouseover = function() {
	     		for(var i = 0; i < b.length; i++) {
	                    b[i].className = "";
	                    d[i].className="hide";
	                }
	   		this.className="active";
	    		d[this.index].className="";
	    		
	         }
     	}

我虽然做出了效果,可我也不是很清楚这个代码。。。你对比着看吧。把j换成i

0 回复 有任何疑惑可以回复我~

感觉是变量作用域的问题

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

在一个FOR循环里,odiv[this.index]为何不能写成odiv[i]

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信