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

这样写为什么实现不了效果,只用一次循环

这样写为什么实现不了效果,只用一次循环

qq_小辉_4 2017-08-22 11:38:51
 var li=document.getElementsByTagName("li")  var div=document.getElementsByTagName("div")  for(var i=0;i<li.length;i++){      li[i].onclick=function(){          li[i].className=""          this.className="on"      }  }
查看完整描述

3 回答

已采纳
?
__innocence

TA贡献313条经验 获得超208个赞

函数闭包问题,你的循环里面,每一个i的值都是li.length,所以这个元素不存在。

先做个试验:把里面两句注释掉,然后直接打印i的值,在控制台看一下输出:

 for(var i=0;i<li.length;i++){
      li[i].onclick=function(){
          //li[i].className=""
          //this.className="on"
          console.log(i);
      }
  }

你会发现,你点击任何一个元素,输出的结果都是一样的。都是li的长度。

这些绑定事件都是点击的时候才调用的,但加载的时候,i的值已经变化了,由于JavaScript闭包的存在,这个i一直存在于内存中;

var li = document.getElementsByTagName('li');    
for (var i = 0; i < li.length; i++) {    
   (function(i){    
        li[i].onclick = function() {        
            console.log(i);      
        }  
   })(i);  
}


查看完整回答
1 反对 回复 2017-08-22
?
Gotta

TA贡献53条经验 获得超16个赞

你要实现什么效果。。?

查看完整回答
反对 回复 2017-08-22
  • 3 回答
  • 0 关注
  • 1719 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信