我想通过for循环内嵌一个事件监听,捕获我点击的是哪个个区域,执行对应函数。可是为什么点击第一个或第二个区域,输出都是2呢?
不是应该对应 0 和 1 吗
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>为什么</title>
<style type="text/css">
.container{
width: 100px;
height: 100px;
border: 1px solid black;
}
</style>
</head>
<body>
<div class="container">container1</div>
<div class="container">container2</div>
<script type="text/javascript">
var container = document.getElementsByClassName("container");
console.log(container.length); //2
for (var i = 0; i < container.length; i++) {
container[i].onmouseup = function(){
console.log(container)
console.log(i) //2 (不明白为什么,不是应该0或1吗)
}
}
</script>
</body>
</html>
6 回答
qq_邪风曲_0
TA贡献9条经验 获得超4个赞
引用上面老兄的一句话:“这是异步加载的过程”,你每次up的时候i根本储存的都是最后一个值,没法取到你想要对应的值。所以这边你要设法循环中把值取到。
一种方法就是用闭包的来取值,另外一种就是使用es6里面的let来代替var声明变量i
但我会继续努力的
TA贡献5条经验 获得超1个赞
因为你的i是从0开始的,所以有0和1两个作为变量i的值,所以最后输出为2.
for (var i = 0; i < container.length; i++) {
//这里的i=0,1,你可以alert(i)看看结果,这就知道为嘛了。
container[i].onmouseup = function(){
console.log(container)
console.log(i) //2 (不明白为什么,不是应该0或1吗)
}
添加回答
举报
0/150
提交
取消