前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >js动态绑定事件,无法使用for循环中变量i的问题

js动态绑定事件,无法使用for循环中变量i的问题

作者头像
小闫同学啊
发布2020-07-14 16:40:05
3.9K0
发布2020-07-14 16:40:05
举报
文章被收录于专栏:小闫笔记

❝小闫语录:我一直在幻想,那些伟大的预言家都来自未来,那些畅销小说家都是真实经历过... ❞

每天不是在写 bug,就是在解 bug 的路上~更多精彩文章请关注公众号『Pythonnote』或者『全栈技术精选』

1.问题描述

在一个 for 循环中,我动态给一堆 a 标签绑定 onclick 事件时,发现点击事件不正确。如下代码:

代码语言:javascript
复制
var link = document.getElementsByClassName("link");
for (var i = 0; i < link.length; i++) {
  link[i].onclick = function() {
    alert(i);
  };
}

我需要的是,点击第一个链接,弹出 0,点击第二个链接,弹出 1......以此类推。但是上述代码点击每一个链接总是弹出一个值,而且还是个不正常的值。之所以说它不正常,是因为上面我获取到了 5 个标签,正常下标应该到 4 结束,但是总是弹出 5 ????

答:那是因为事件函数是一个匿名函数,此函数会在 for 循环执行之后调用。调用时,发现内部没有定义变量 i ,所以就去外面找一下,发现外层有,就取外层的值了,但是为什么是 5 呢?那是因为 for 循环的结束条件是 i 不满足 i<5 ,那么结束后变量 i 的值就是 5,匿名函数到外层取值正好取到了它。更多精彩文章请关注公众号『Pythonnote』或者『全栈技术精选』

2.解决方法

可以采用自定义属性的方式:

代码语言:javascript
复制
var link = document.getElementsByClassName("link");
for (var i = 0; i < link.length; i++) {
  link[i].index = i;
  link[i].onclick = function() {
    alert(this.index);
  };
}
};
//微信公众号:全栈技术精选
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 全栈技术精选 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.问题描述
  • 2.解决方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档