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

javascript小函数,为什么for循环遍历dom节点,监听点击事件,输出都是一样的呢?

javascript小函数,为什么for循环遍历dom节点,监听点击事件,输出都是一样的呢?

我想通过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


查看完整回答
1 反对 回复 2016-10-04
?
烈日当空0707

TA贡献2条经验 获得超0个赞

这个是闭包问题。你上网一搜就有了。
查看完整回答
反对 回复 2016-10-04
?
qq_堕落的撒旦_0

TA贡献12条经验 获得超10个赞

啊,抱歉,我是新手,不太懂这个问题····

查看完整回答
反对 回复 2016-10-04
?
但我会继续努力的

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吗)

            }


查看完整回答
反对 回复 2016-10-03
  • newsudhc3634140
    newsudhc3634140
    2是container.length的值啊,for循环条件是 i < container.length。所以为什么console.log(i)会输出2? 你自己都说了是0 和 1 了啊?
  • 6 回答
  • 1 关注
  • 3465 浏览
慕课专栏
更多

添加回答

举报

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