javascript - addEventListener 点击在点击之前执行

标签 javascript dom-events addeventlistener

我想在点击函数中传递参数。

var albums = document.getElementsByClassName("album");
for(var i = 0; i<albums.length; i++){
    document.getElementById(albums[i].id).addEventListener("click", goAlbum(albums[i].id), false);
}

但是,goAlbum 函数在创建时被执行,然后该函数将不再执行。 我做错了什么?

最佳答案

goAlbum 正在执行,因为您调用了该函数。您不是在“创建”功能。您打算做的是为 addEventListener 提供点击某些内容时执行的逻辑;该逻辑是“调用 goAlbum”。为此,将函数调用包装在匿名函数中。

function toArray(list) {
    return Array.prototype.slice.call(list);
}

var albums = toArray(document.getElementsByClassName("album"));
albums.forEach(function (album) {
    document.getElementById(album.id).addEventListener("click", function () {
        goAlbum(album.id);
    }, false);
});

此外,因为 it is unwise to create functions in a for loop ,我已重构您的代码以使用 forEach。我需要将 document.getElementsByClassName 返回的 NodeList 转换为 Array 以便使用 forEach,因此toArray 函数。

关于javascript - addEventListener 点击在点击之前执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27245040/

相关文章:

javascript - 如何使用 AngularJS 将对象插入数组

javascript - addEventListener 在 IE8 中不工作

ckeditor - 如何更改 CKEditor 元素

javascript - 获取网页的 URL,不包括组件的 URL

javascript - 如何在 Div Bootstrap 上应用滑动功能

javascript - 如何检测 firefox 扩展中的 firefox 启动事件?

javascript - 如何让 Javascript 事件仅在单击背景(而不是其他元素)时触发?

javascript - 少量的 JavaScript

javascript - 在 SAPUI5/OpenUI5 中创建和删除 View 时发生内存泄漏