我想在点击函数中传递参数。
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/