javascript - 循环结果数组的最后一个索引
问题描述
我有以下代码,使用以下代码为每个元素添加一个事件addeventlistener
:
var x, y, z;
elm = elm.normalize();
if(!isobj(elm) && iselm(elm)) {
elm = new Array(elm);
}
for(x in elm) {
(function() {
elm[x].addEventListener('click', function() {
alert(x);
});
})();
}
但是当我单击element
通过循环添加事件的任何内容时,它总是显示最后一个索引example
,就像当我单击element
它时,它会在警报框中显示带有example
文本的警报。
这是console.log(elm)
after的结果elm = elm.normalize()
:
[示例:input.sample.fld,示例:input.example.fld]
isobj(elm)
is afunction
检查是否variable
是 an object
,同样 like
iselm(elm)
is afunction
检查是否variable
是 an element
。
由于解决了这个问题,我试图(function() { /* I put the addEventListener as above */ })();
在循环内使用,但仍然无法正常工作。
我已经确保它x
总是显示它的索引,但我不知道为什么它总是显示事件中的最后一个索引。
请帮忙。
解决方案
到该行代码执行时,for循环已经完成。
解释:https ://dzone.com/articles/why-does-javascript-loop-only-use-last-value
如果您的浏览器支持,您可以使用let
它。(有关解释和替代方法,请参阅文章)
var x, y, z;
elm = elm.normalize();
if(!isobj(elm) && iselm(elm)) {
elm = new Array(elm);
}
for(x in elm) {
(function() {
let myX = x;
elm[myX].addEventListener('click', function() {
alert(myX);
});
})();
}
推荐阅读
- php - php中的aes-256-gcm解密
- sqlmap - 数据库地图
- asp.net - 如何为需要 int 参数但接收非 int 参数的 ASP.NET Web API GET 控制器自定义错误消息?
- php - 如何检查是否在字符串中找到(多个)单词
- node.js - 找不到模块
- python - 解析多参数命令行样式的最佳方法是什么?
- javascript - 在移动宽度下从汉堡菜单响应显示内容的问题
- javascript - Victory Native - Victory Stack 仅呈现两个组之一的标签
- python - 如何在 ffmpeg-python 包中使用 libx265 (H.265)?
- c# - SPFieldLookup 以编程方式“添加一列以显示这些附加字段中的每一个”