This question already has answers here:
JavaScript closure inside loops – simple practical example
                            
                                (44个答案)
                            
                    
                3年前关闭。
        

    

我试图将一个eventListener添加到节点列表中的每个html元素,并将相同的html元素作为参数传递给回调函数。我的代码看起来像这样。

let programs = document.getElementsByClassName('program-name')
for (i = 0; i < programs.length; i++){
    programs[i].addEventListener("click", () => testFunc(programs[i]))
}
function testFunc(program) {
    console.log(program)
}


问题是我期望console.log(program)将html元素记录到控制台,但是所有日志都是undefined

最佳答案

除了使用闭包(如注释中所建议的那样),您还可以使用传递给处理程序的event对象,如下所示:

programs[i].addEventListener("click", (evt) => testFunc(evt.currentTarget))


然后,单击的HTML元素将传递到回调。

关于javascript - 难以将html元素从节点列表传递到匿名函数中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41683055/

10-11 13:33