【问题标题】:addEventListener click executed before clickedaddEventListener click 在点击之前执行
【发布时间】:2014-12-02 08:34:43
【问题描述】:

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

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 在创建时会被执行,然后该函数将不再执行。 我做错了什么?

【问题讨论】:

    标签: javascript dom-events addeventlistener


    【解决方案1】:

    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 函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-21
      • 1970-01-01
      • 2021-08-06
      • 2015-12-06
      相关资源
      最近更新 更多