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

标签 javascript extjs event-listener easeljs

我有一个对象数组(特别是 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/

相关文章:

javascript - 事件变量来自哪里?

javascript - Chrome 扩展程序,添加监听器没有响应

Mysql 存储读取 true 或 false 的 bool 值

javascript - 注意动态添加的类

actionscript-3 - flex/air ActionScript 错误的事件监听器

javascript - jQuery Ajax 成功函数参数

javascript - CSS/Javascript 不绑定(bind)动态 html 追加

javascript - Ext JS 的自定义缓存设置

extjs - Sencha 触摸 2 : How to reference self in class definition

java - Swing 和 AWT 混合不好,但还是做了,为什么?