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

为什么我这么写不对,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 = "";

                 }


正在回答

2 回答

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

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

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")

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

小菜鸟飞 提问者

为什么for执行完了呀 里边的for执行完了,可是外边的还没有啊
2016-08-12 回复 有任何疑惑可以回复我~
#2

水里有条鱼 回复 小菜鸟飞 提问者

for就是执行完了,这么短的循环,js里面在for里定义的数是可以在外面是用的,就是i,i在for执行完后还会存在,并且等于最后值, oLis[i].onclick = function() {//代码}只是绑定事件,以及定义函数,真正执行代码是在事件触发时,在这里 for(){oLis[i].onclick = function() {}} 等价 for(){oLis[i].onclick = hanshu();} hanshu(){//代码};
2016-08-12 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

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