我正在遍历多个元素,我也想为其分配一个onclick事件处理程序。

问题在于发送到goTo函数(事件处理程序)的元素始终是循环中的最后一个元素。我究竟做错了什么?

var navLinks = document.getElementsByClassName('navigation');

    for (var i = 0; i < navLinks.length; i++) {
        var navLink = navLinks[i];
        navLink.onclick = function() { goTo.call(navLink); }
    }

最佳答案

您应该添加一个闭包,如下所示:

var navLinks = document.getElementsByClassName('navigation');

for (var i = 0; i < navLinks.length; i++) {
    var navLink = navLinks[i];
    (function(navLink){   //This line does the magic
         navLink.onclick = function() { goTo.call(navLink); }
    })(navLink);  //This calls the created function
}


这样,内部navLink在每个循环周期中将是唯一的,因此不会被覆盖(这就是为什么它仍保留先前代码中的最新值的原因)

干杯

关于javascript - 在onclick事件处理程序循环中设置当前元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21081750/

10-09 18:21