Javascript onclick听众

时间:2014-01-14 10:48:55

标签: javascript

我正面临一个让我发疯的问题。 我正在迭代一组元素。假设集合的大小为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个不同的元素,例如处理函数是相同的,但该函数的参数是不同的? 怎么做? 谢谢!

2 个答案:

答案 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);
    }
}