问答详情
源自:10-1 编程挑战

为什么我这么写不对,this在这里什么意思

 for(var i= 0,len = oLis.length;i<len;i++){

                 oLis[i].index = i;

                 oLis[i].onclick = function() {

                     for(var n= 0;n<len;n++){

                         oLis[n].className = "";

                         oDivs[n].className = "hide";

                     }

oLis[i].className="on";

oDivs[i].className="";

                   //  this.className = "on";

                     //oDivs[this.index].className = "";

                 }


提问者:小菜鸟飞 2016-08-11 16:53

个回答

  • vylss
    2016-08-17 10:36:45

     for(var i= 0,len = oLis.length;i<len;i++) 分号写成逗号

  • 水里有条鱼
    2016-08-11 20:51:20

    oLis[i].className="on";

    oDivs[i].className="";

    给节点绑定事件执行的函数会执行上面那两句,那问题是执行时i是什么?很明显当你要执行代码时,for已经执行完(因为事件全部绑定),所以i恒定为oLis.length,所以oLis[i]和oDivs[i]是没有的,所以出错

    this在这里是指触发函数的对象,比如<p onclick="fun()" id="na"></p> 假如p被点击,触发fun函数对象就是p,现在

    this 等价于 document.getElementById("na")