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

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


1.问题描述

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

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.解决方法

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

var link = document.getElementsByClassName("link");
for (var i = 0; i < link.length; i++) {
  link[i].index = i;
  link[i].onclick = function() {
    alert(this.index);
  };
}
};
相关文章
|
5天前
|
JavaScript 前端开发
JavaScript中有哪几种循环?他们的运用场景在哪?
JavaScript中有哪几种循环?他们的运用场景在哪?
|
5天前
|
JavaScript 前端开发
javascript中常用的事件
这篇文章列出并演示了JavaScript中常用的DOM事件,包括失去焦点、获得焦点、鼠标点击、键盘事件等,并展示了如何通过直接在HTML标签中使用事件句柄和通过JavaScript为元素添加事件监听器两种方式来注册事件。
|
5天前
|
JavaScript 前端开发 索引
js的循环中foreach、for in和for of的区别
js的循环中foreach、for in和for of的区别
17 0
|
5天前
|
JavaScript 前端开发
JavaScript 事件的绑定
JavaScript 事件的绑定
13 0
|
5天前
|
JavaScript 前端开发
js的回车事件
js的回车事件
19 3
|
5天前
|
JavaScript 前端开发
javascript的循环语句。
javascript的循环语句。
12 1
|
5天前
|
JavaScript 前端开发
JavaScript基础&实战(3)js中的流程控制语句、条件分支语句、for循环、while循环
这篇文章讲解了JavaScript中的流程控制语句,包括基本的if条件判断、弹窗提示输入、switch条件分支语句、while和do...while循环以及for循环的使用和示例。
JavaScript基础&实战(3)js中的流程控制语句、条件分支语句、for循环、while循环
|
8天前
|
JavaScript 前端开发
JavaScript 事件的概念
JavaScript 事件的概念
20 1
|
25天前
|
设计模式 JavaScript 前端开发
JS 代码变量和函数的正确写法
JS 代码变量和函数的正确写法
31 3
|
5天前
|
JavaScript 前端开发
JavaScript声明变量的几种方式
JavaScript声明变量的几种方式
10 0

热门文章

最新文章