javascript - js无法获取数组内某个元素的下标?
阿神
阿神 2017-04-11 13:32:40
[JavaScript讨论组]

现页面上有四个不相领的元素,我分别获取,并将该四个元素放入一个数组内,点击其中的某个元素时,获取它在这个数组内的下标。控制台上一直输出undefined,代码如下:
var dom1=document.getElementById("node1");
var dom2=document.getElementById("node2");
var dom3=document.getElementById("node3");
var dom4=document.getElementById("node4");

var domArr=[dom1,dom2,dom3,dom4];
console.log(domArr);//打印正常
for(var i=0,len=domArr.length;i

domArr[i].onclick=function(){
    console.log(this.index);//undefined
    console.log(domArr[i]);//undefined
    console.log(this)//正常打印domArr[i]
}

}
感觉自己瞬间掉坑里去了,是因为我声明的数组不能直接修改元素而使得无法获取domeArr[i]还是因为其他原因?求指教(难道是因为这四个节点是js创建的,所以无法获取到?可是这四个节点是页面上有的啊,我只是获取到了并将它放入一个自定义的数组内了啊,再说了,console.log(this)是能够正常输出的)

阿神
阿神

闭关修行中......

全部回复(7)
ringa_lee

你设个断点就知道为什么了,在循环中是不会走onclick的function的,而在点击触发时i一直是4,所以返回undefined。

var dom1=document.getElementById("node1");
var dom2=document.getElementById("node2");
var dom3=document.getElementById("node3");
var dom4=document.getElementById("node4");

var domArr=[dom1,dom2,dom3,dom4];
console.log(domArr);//打印正常
for(var i=0,len=domArr.length;i<len;i++){
    (function(i){
        domArr[i].onclick=function(){
            console.log(this.index);//undefined
            console.log(domArr[i]);//undefined
            console.log(this)//正常打印domArr[i]
        }
    })(i)
}

这么改就行了

PHPz

建议看下闭包,这种问题实在是问的太多了
http://www.cnblogs.com/zjf-19...

天蓬老师

就在这一页就有一个一样的问题

高洛峰
for(var i=0,len=domArr.length;i<len;i++){
    (function(_i){
        domArr[_i].onclick=function(){
            console.log(this.index);//undefined
            console.log(domArr[_i]);//undefined
            console.log(this)//正常打印domArr[_i]
        }
    })(i);
}

闭包

阿神

在onclick事件发生之前for循环已经结束了,此时i=5。所以domArr[5]=undefine.

巴扎黑

兄弟,获取数组元素下标是用arr.indexOf('元素')

你把console.log(this.index);
改为console.log(domArr.indexOf(this));就可以正常输出了

然后关于console.log(domArr[i]);//undefined输出undefined的问题就建议你去了解一下闭包了,实际上i一直都是等于domArr.length,所以你consol.log(domArr[domArr.length])当然是undefined拉,因为你数组的最后一个元素是domArr[domArr.length-1]

伊谢尔伦

感谢各位的解答,我找到问题了——没有想到,这个简单的数组循环,竟然形成了一个闭包——由此可以看出,本人对闭包的概念理解尚还有不足,总之,谢谢大家的解惑

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号