javascript – 单击之前执行的addEventListener单击执行

我想在click函数中传递参数.

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 – 使用for循环和传递值的addEventListener


下一篇:javascript – 如何在类中的html中添加带有函数回调的事件监听器?