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

来源:10-1 编程挑战

larger

2016-02-17 17:11

有点绕不出来了 解答

    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回答

  • qq_苏米_0
    2016-03-03 00:49:31

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

    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://img.mukewang.com/56d7184c0001ade702440123.jpg这样一段代码了,你可以alert(i)就知了。

  • lxc1363992
    2016-02-22 11:24:29


    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

  • larger
    2016-02-17 17:14:51

    感觉是变量作用域的问题

JavaScript进阶篇

本课程从如何插入JS代码开始,带您进入网页动态交互世界

468060 学习 · 21891 问题

查看课程

相似问题