基于迭代器更改eventListener函数参数。 (香草JS)

时间:2013-07-30 11:18:13

标签: javascript

我想要的: 我有一个方法,它接受一个int作为其唯一的参数,然后我创建一个列表,其中每个元素将在单击时调用另一个函数,我唯一想要更改的是每个元素在单击时传递的数字。

我有什么:

while(++i<e){
    (...)
    a.addEventListener('click',function(){selectUser(i)},false);
    (...)
}

当然,显而易见的问题是,在调用时,它总是会传递'i'的最终值。 我需要每个元素都传递'i'创建时的值。 即;当i = 3时,我希望它转化为:

a.addEventListener('click',function(){selectUser(3)},false);

我猜它涉及一些方法,它返回另一个带有实际值的方法,但我不确定如何实现它。我对js的经验很少。

提前致谢。

2 个答案:

答案 0 :(得分:1)

这是一个典型的闭包问题。您必须将事件处理程序包含在一个闭包函数中,该函数保持变量i的状态。像这样......

while(++i<e){
    (...)
    (function(index){
    a.addEventListener('click',function(){selectUser(index)},false);
    })(i);
    (...)
}

这样,包装函数的每次调用都将保持变量i的状态,从而为您提供正确的结果。

答案 1 :(得分:1)

您必须创建一个新的功能范围。您可以通过以下方式执行此操作(调用匿名函数,该函数将返回具有指定i的新函数。

a.addEventListener('click',(function(index) {
    return function(){ selectUser(index) };
})(i),false);