我想要的: 我有一个方法,它接受一个int作为其唯一的参数,然后我创建一个列表,其中每个元素将在单击时调用另一个函数,我唯一想要更改的是每个元素在单击时传递的数字。
我有什么:
while(++i<e){
(...)
a.addEventListener('click',function(){selectUser(i)},false);
(...)
}
当然,显而易见的问题是,在调用时,它总是会传递'i'的最终值。 我需要每个元素都传递'i'创建时的值。 即;当i = 3时,我希望它转化为:
a.addEventListener('click',function(){selectUser(3)},false);
我猜它涉及一些方法,它返回另一个带有实际值的方法,但我不确定如何实现它。我对js的经验很少。
提前致谢。
答案 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);