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

关于js批量绑定事件的问题

关于js批量绑定事件的问题

DIEA 2018-10-11 13:27:30
<body>  <ul id="list">  <li>1</li>  <li>2</li>  <li>3</li>  <li>4</li>  <li>5</li>  </ul>  <script>  var list_obj = document.getElementsByTagName('li');  for (var i = 0; i <= list_obj.length; i++) {          list_obj[i].onclick = function() {          alert(i);        }  }  </script>  </body>  for循环绑定完事件最后执行的时候都是最后一个事件相同,点击的时候弹出的不是0 1 2 3 4,而是5,这是为什么呢 如何解决
查看完整描述

1 回答

?
MYYA

TA贡献1868条经验 获得超4个赞

当调用onclick事件的时候,会向上找到i对象的值。这个时候,由于已经循环完毕,所以i的值是5

解决方法:

闭包

for (var i = 0; i <= list_obj.length; i++) {
  list_obj[i].onclick = (function(i){
    return function() {  alert(i); }
  })(i);  }

ES6

for (let i = 0; i <= list_obj.length; i++) {        
  list_obj[i].onclick = function() {      
    alert(i);      
  }  
}


查看完整回答
反对 回复 2018-11-18
  • 1 回答
  • 0 关注
  • 859 浏览
慕课专栏
更多

添加回答

举报

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