我是否需要在Javascript中删除重复的动态函数?

时间:2016-06-16 04:43:26

标签: javascript jquery dynamic

如果我按照此处所述动态分配多次事件处理程序,我只需要弄清楚我需要注意jquery中的重复事件处理程序:http://www.parallaxinfotech.com/blog/preventing-duplicate-jquery-click-events

如果我多次在另一个函数中动态声明一个函数,我是否需要注意这一点或以某种方式处理它? JavaScript如何真正处理这个问题?它是仅使用被调用的最后一个函数还是仅在加载时实例化一次函数?据我所知,它没有多次运行该功能。

$(document).on("click",".button",function() {

    function alertThem()
    {
        alert('Clicked!');
    }
    alertThem();
});

3 个答案:

答案 0 :(得分:0)

JavaScript会记住您分配的所有功能。

$('button').click(function(){
    alert('hi')
})
$('button').click(function(){
    alert('hi')
})

上面的代码会提醒“hi”两次。如果您要分配新功能并且想要清除旧功能,则可以执行取消绑定()。单击()。它会做什么,它将解除所有事件的绑定,或者你可以解除绑定(“点击”),这将取消绑定点击。见https://jsfiddle.net/rznbtc1p/

$('button').click(function(){
    alert('hi')
})
$('button').unbind().click(function(){
    alert('hi')
})

答案 1 :(得分:0)

您提供的链接不起作用(给我超时)所以我希望我理解您的要求。

关于那里发生的事情:

在您的脚本中,您创建了一个闭包并将其绑定到click事件。每次单击带有类按钮的元素时,都会触发匿名函数。每次触发它定义函数alertThem(),并调用它。只有一次定义它,只有一次调用它。该函数的范围是其父级,即闭包。该函数未在该范围之外定义,因此无需担心双重定义。

旁注:根据经验,个人认为定义这样的函数不是一个好主意,但如果它适合你的项目......那就去吧。

现在关于重复。由于我看不到链接,我认为你指的是双事件绑定。

在js中可以将任意数量的事件绑定到同一个元素。例如,你可以点击“嗨,你点击我”这样的东西绑定,然后单击“嗨,你说在点击我之前收到了一条消息”。单击该元素时,您将看到这两个消息。

这实际上可能成为一个问题。您有3个选择:

  1. 要非常小心如何绑定事件

  2. 继续跟踪您绑定的内容

  3. 检查事件是否已经绑定(虽然这有点不可靠)。您可以在此处查看:jQuery find events handlers registered with an object

答案 2 :(得分:0)

在您的代码段中,您没有创建重复的事件处理程序。

您的代码段中发生的是您在点击处理函数范围内创建新函数alertThem,然后在下面的行中执行它。