gpt4 book ai didi

javascript - 如何将事件监听器添加到对象数组

转载 作者:行者123 更新时间:2023-12-01 11:44:37 25 4
gpt4 key购买 nike

我有一个对象数组(特别是 easelJS 图像) - 像这样:

var imageArray = new Array;
gShape = new createjs.Shape();
// shape is something
imageArray.push(gShape);

我想要做的是有一个事件监听器,而不是:
gShape.addEventListener("click", function() {alert"stuff"});

我希望程序具体知道单击了哪个区域,以便我可以通过以下方式发送警报框:
imageArray[index].addEventListener("click", function(){
alert " you clicked region number " + index}

最佳答案

当然。您可以只使用闭包来保存该迭代的索引。否则有由相同的函数范围共享并且会给你相同迭代的值。为每个函数创建一个单独的函数将保存函数内部的状态。

var imageArray = new Array;
gShape = new createjs.Shape();
// shape is something
imageArray.push(gShape); // Dumped all the objects

for (var i = 0; i < imageArray.length; i++) {
(function(index) {
imageArray[index].addEventListener("click", function() {
console.log("you clicked region number " + index);
})
})(i);
}

或更好
 for(var i = 0; i < imageArray.length; i++) {
imageArray[i].addEventListener("click", bindClick(i));
}

function bindClick(i) {
return function() {
console.log("you clicked region number " + i);
};
}

ES6 救援
let imageArray = [];
gShape = new createjs.Shape();
// shape is something
imageArray.push(gShape); // Dumped all the objects

for (let i = 0; i < imageArray.length; i++) {
imageArray[i].addEventListener("click", function() {
console.log("you clicked region number " + i);
});
}

使用 let关键字在迭代中为变量创建一个 block 作用域,并在调用事件处理程序时具有正确的索引。

关于javascript - 如何将事件监听器添加到对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17981437/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com