This question already has answers here:
Event binding on dynamically created elements?
                                
                                    (23个答案)
                                
                        
                                2年前关闭。
            
                    
我很难弄清楚这段代码遇到了什么样的问题。此代码采用通过Ajax收集的一系列链接。每次用户搜索新术语时,linksArr都会填充新的链接,并且链接按钮将打开新的链接集。

populateLinks = function (linksArr){
    // linksArr contains links from Ajax search
    linksArr.forEach(function(link,index){
        // Add on click handler to each link button
        $('.linkButton' + [index]).on("click", function(){
            window.open(link, "_blank");
        })
    });
};


第一组链接可以正常工作。在将任何后续的链接数组传递到函数之后,就会出现问题。当将新的链接数组传递给函数时,一旦单击链接按钮,window.open()将引用并打开传递给linksArr的第一个链接数组,然后紧接着打开当前数组。最近传递到函数中的链接。

我很困惑可能是什么问题。我相信这可能是由于使用了forEach函数而导致的关闭问题,但是几个小时后我无法弄清楚。

这似乎是一个看似简单的问题,也许我已经忽略了一些东西。我很想了解关于window.open打开的链接到底发生了什么,以及为什么早先传递的先前链接(当新链接填充时它们甚至不在linksArr中)在打开之前被打开了。当前,最近在linksArr中的链接中传递。

最佳答案

on不会替换click处理程序。它添加了一个单击处理程序。

您可能要改为说.off("click").on("click", function () { ... })

09-25 17:53