我正面临一个让我发疯的问题。
我正在迭代一组元素。假设集合的大小为N.在每次迭代中,我写node.onclick = function() { handleClick(idx); };
其中node是元素,idx是一个全局变量,我在每次迭代中递增。
我的目标是以这样的方式监听N个元素:当单击元素i(我属于[0,N-1])时,使用参数idx = i调用handleClick(idx)。
但是,调试显示,无论点击哪个元素,在handleClick(idx)中,idx将始终等于N-1(最后一个值)。我也尝试使用idx作为局部变量。
我试图创建一个全局数组node [],它在每次迭代中推送一个新元素......
如何将“onclick”监听器设置为N个不同的元素,例如处理函数是相同的,但该函数的参数是不同的? 怎么做? 谢谢!
答案 0 :(得分:1)
问题由DontVoteMeDown描述,解决方案是创建一个像这样的无穷大的函数:
node.onclick = (function(idx) {
return function() { handleClick(idx); };
})(idx);
这样做是直接调用anoymous函数,因此id被复制到一个新的变量中,该变量在匿名函数中重新存在。
答案 1 :(得分:1)
尝试
for(var i = 0; i<set.length; i++){
set[i].onclick = function(){
handleClick(i);
}
}