Javascript onclick listener



我面临着一个让我发疯的问题。我正在迭代一组元素。假设集合的大小为 N。在每次迭代中,我都会编写node.onclick = function() { handleClick(idx); };其中节点是元素,idx 是全局变量,我在每次迭代中都会递增。我的目标是侦听 N 个元素,当单击元素 i(i 属于 [0, N-1])时,使用参数 idx=i 调用 handleClick(idx)。但是,调试显示,无论单击哪个元素,在handleClick(idx)中,idx将始终等于N-1(最后一个值)。我也尝试了将 idx 作为局部变量。我尝试创建一个全局数组节点[],它在每次迭代中都会推送一个新元素......

如何将"onclick"侦听器设置为 N 个不同的元素,例如处理程序函数相同但该函数的参数不同?怎么做?谢谢!

这个问题由DontVoteMeDown描述,一个解决方案是创建一个像这样的anoymous函数:

node.onclick = (function(idx) {
    return function() { handleClick(idx); };
})(idx);

这样做是直接调用 anoymous 函数,因此 id 被复制到一个新变量中,该变量在匿名函数内重新出现。

试试

for(var i = 0; i<set.length; i++){
    set[i].onclick = function(){
        handleClick(i);
    }
}

最新更新