javascript - 如何向数组元素添加事件?

标签 javascript events

我的代码

var boxes = document.getElementsByClassName("box");
for(var i=0; i<boxes.length;i++)
{
    boxes[i].addEventListener("dblclick", function(e){
        this.classList.add("animateSize");
        this.style.width="2px";
        this.style.height="2px";
        window.setTimeout(2000);
    });
}

最初我只有一个框,然后创建更多框,但是当我双击任何新创建的框时没有任何反应,只有当我双击初始框时才会触发事件。

我做错了什么?

PS。当我在创建后发出警报(boxes.length)时,比如说 4 个盒子,我得到了正确的警报长度(5=4 + 1 个初始盒子)。

最佳答案

问题是您的代码仅附加当前在 DOM 中加载的匹配的事件处理程序。如果这是在 DOM 加载上,则任何“ future ”元素都不会附加该事件。

您可以监听静态容器上的双击(我已经找到文档)并检查目标元素是否具有类 box。如果是这样,请执行您的代码:

document.addEventListener("dblclick", function(e){
    if(e.target.classList.contains('box')){
        var box = e.target;
        box.classList.add("animateSize");
        box.style.width="2px";
        box.style.height="2px";
        window.setTimeout(2000);
    }
});

也称为事件委托(delegate)。

请注意,您需要更改 document 以获取最接近的静态容器。

当然还有其他方法,例如每次将节点添加到 DOM 时附加事件处理程序。

JSFiddle

关于javascript - 如何向数组元素添加事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26259577/

相关文章:

javascript - 获取触发元素

javascript - 从特定表单获取特定输入?

javascript - WebGL 中的 texImage2D 需要多少数据?

javascript - 将 jQuery 焦点和模糊添加到菜单以实现可访问性

c# - 如何使用内部构造函数模拟事件

java - 在 Java GUI 中使用线程计数

java - java如何知道使用什么索引

javascript - @Angular (Angular 2) 无法使用 es5 进行编译 - Set、Map 等缺失

javascript - 用于输入地址的自动完成文本框是个好主意吗?

java - 在 IE 中使用 javascript 中的 Java 失败