Javascript jQuery:添加事件侦听器是否会覆盖同一事件的前一个侦听器?

Javascript jQuery:添加事件侦听器是否会覆盖同一事件的前一个侦听器?,javascript,jquery,html,Javascript,Jquery,Html,例如,假设我有 $(element).on('click', function() {/*Some Stuff*/}); 在某个地方定义,然后稍后我想向同一个单击事件添加更多功能。如果我这样做 $(element).on('click', function() {/*Other Stuff*/}); “其他内容”会覆盖“某些内容”吗?不,事件不会被覆盖,它们会被追加或推送到事件处理程序列表中 这是的一个典型用法 如果使用了.live,则可以删除事件。您误解了;添加另一个处理程序不会覆盖第一个

例如,假设我有

$(element).on('click', function() {/*Some Stuff*/});
在某个地方定义,然后稍后我想向同一个单击事件添加更多功能。如果我这样做

$(element).on('click', function() {/*Other Stuff*/});

“其他内容”会覆盖“某些内容”吗?

不,事件不会被覆盖,它们会被追加或推送到事件处理程序列表中

这是的一个典型用法


如果使用了
.live
,则可以删除事件。

您误解了;添加另一个处理程序不会覆盖第一个处理程序

请参阅此JSFIDLE:

点击链接将“一”写入控制台。单击该按钮将向链接添加另一个处理程序。现在单击链接将“一”和“二”写入控制台:

不,不会
on()
与bind类似——它将事件添加到
$.data(“事件”)


但是,您可以通过
off()
显式删除内容。

第二个侦听器不会覆盖第一个侦听器。jQuery事件处理程序是累积添加的,并按照附加的顺序执行

影响一个处理程序是否阻止另一个处理程序运行的因素是函数如何取消浏览器的默认单击处理程序(即,如何停止浏览器跟随链接的url)

如果使用传统方法:

$(element).on('click', function() {

    /* Some Stuff, do your thing */ 

    return false; 
});
上面的处理程序将停止事件本身并传播到其他处理程序

但您可以停止事件操作,而无需停止其传播或处理程序:

$(element).on('click', function(e) {

    // prevent the default action at first, just to make it clear :)
    e.preventDefault(); 

    /* do your thing */

    return /* what you want */;
});

这将确保默认的单击操作不会发生,但该事件会持续到其他handler。jQuery事件还有一些其他有用的(例如,
event.stopPropagation()
)值得了解。

这一点已经得到了回答,但我想我应该补充一下,当我的点击侦听器可能被复制时,我通常如何解决这个问题

我只是用户查询on和off方法

$(元素).off('click')//使用方法删除以前添加的单击侦听器

$(element).on('click',function(){/Some Stuff/})//将其添加回并仅运行一次

.off()方法删除附加了.on()的事件处理程序。有关更多信息,请参阅该页上有关委派和直接绑定事件的讨论。不带参数调用.off()将删除附加到元素的所有处理程序。通过提供事件名称、名称空间、选择器或处理程序函数名称的组合,可以删除元素上的特定事件处理程序。当给定多个筛选参数时,提供的所有参数必须匹配才能删除事件处理程序


看看这里为什么会有反对票?这个问题很清楚也很简洁。哈哈,我不想在不知道情况是否如此的情况下盲目地编写代码。我编辑了我的问题以使其更有意义。哦!这就解释了。我一直想知道为什么要麻烦使用.preventDefault()。。。现在我知道了。如果你添加两次完全相同的回调呢?例如:
jQuery(window).on(“scroll,MyClass.scroll”)
。有测试吗?(我想我可以看看。叹气。)这实际上并没有回答这个问题。它只是给出了一个建议的技巧。这个问题已经得到了明确的回答。在这个问答游戏中,如果你想获得更高的票数,你通常会以一种新的方式回答问题,或者大声说你正在提供尚未提供的其他信息。我只是在研究这个问题时偶然发现了这一点,并认为其他人可能也想知道……明白了。我只是发表了一条评论,因为你对这个网站似乎很陌生。这非常有帮助。这项技术使我能够解决一个问题,即许多vanilla JS事件侦听器正在堆叠。非常感谢你!