我想在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函数.