在for循环中向callback函数添加参数

时间:2016-03-14 17:07:41

标签: javascript for-loop callback event-listener

我试图向这个问题提出类似的问题,但无法找到适合我的解决方案。我有以下代码

for(var i=0; i<keys.length; i++) {
    document.getElementById("btn_"+keys[i]).addEventListener('click', function(){changeTab(keys[i]);});
}

现在在回调中执行此假keys[i],我显然不想要。我需要能够遍历keys数组并将当前值传递给回调中的函数调用。我该如何解决/实现这个目标?

2 个答案:

答案 0 :(得分:1)

该事件也会传递给事件处理程序。您可以从那里获取目标元素,如下所示:

addEventListener('click', function (event) {
  changeTab( event.target );
});`

或者,您可以将回调包装在单独的范围中以保留i的值,如this answer

中所示

答案 1 :(得分:0)

我设法通过使用接受参数的外部函数来实现这一目的。

for(var i=0; i<keys.length; i++) {
    !function outer(i){
        document.getElementById("btn_"+i).addEventListener('click', function(){changeTab(i);})
    }(keys[i])
}