0

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

我有的:

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

当然,明显的问题是,当被调用时,它总是会传递 'i' 的最终值。我需要每个元素传递“我”在创建时所具有的值。IE; 当 i=3 时,我希望它转换为:

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

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

提前致谢。

4

2 回答 2

1

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

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

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

于 2013-07-30T11:20:58.623 回答
1

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

a.addEventListener('click',(function(index) {
    return function(){ selectUser(index) };
})(i),false);
于 2013-07-30T11:21:50.640 回答