如果我按照此处所述动态分配多次事件处理程序,我只需要弄清楚我需要注意jquery中的重复事件处理程序:http://www.parallaxinfotech.com/blog/preventing-duplicate-jquery-click-events
如果我多次在另一个函数中动态声明一个函数,我是否需要注意这一点或以某种方式处理它? JavaScript如何真正处理这个问题?它是仅使用被调用的最后一个函数还是仅在加载时实例化一次函数?据我所知,它没有多次运行该功能。
$(document).on("click",".button",function() {
function alertThem()
{
alert('Clicked!');
}
alertThem();
});
答案 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个选择:
要非常小心如何绑定事件
继续跟踪您绑定的内容
检查事件是否已经绑定(虽然这有点不可靠)。您可以在此处查看:jQuery find events handlers registered with an object
答案 2 :(得分:0)
在您的代码段中,您没有创建重复的事件处理程序。
您的代码段中发生的是您在点击处理函数范围内创建新函数alertThem,然后在下面的行中执行它。