如果我在DOM上附加两个相同的事件,那将是执行的顺序

时间:2017-08-16 07:12:05

标签: javascript javascript-events

如果我在元素上附加两个单击事件,那么将执行两个处理程序的顺序。我知道jQuery的执行顺序与附加事件的顺序相同。但我不确定JavaScript的行为。


  

如果它只是追加事件处理程序,那么如果我想覆盖所有现有事件处理程序,我该怎么办?

2 个答案:

答案 0 :(得分:2)

The handlers will execute in the order in which they were bound

DOM3 event spec引入了按注册顺序触发的要求(大多数浏览器都这样做):

  

接下来,实现必须确定当前目标的候选事件侦听器。这必须是已按注册顺序在当前目标上注册的所有事件侦听器的列表。

来自developer.mozilla.org

  

目标阶段中的事件将按照注册顺序触发元素上的所有侦听器,而不管useCapture参数如何.-

另外:  Javascript event order

答案 1 :(得分:0)

如果您只想删除或覆盖jQuery使用.on()方法附加的事件处理程序,那么您可以分别使用.off()方法删除它们。然后再次添加您想要使用的处理程序。查看文档here

让我们说你知道他们已经附加的处理程序是这样命名的函数:

function someHandler(e) {
  // do something with the event e
}

$('#myElement').on('click', someHandler);

您可以通过调用

删除此项
$('#myElement').off('click', someHandler);

如果处理程序虽然我们匿名函数如此:

$('#myElement').on('click', function(e) { ... } );

然后你必须删除所有附加的jQuery 的监听器(jQuery跟踪附加的事件/监听器/处理程序)

$('#myElement').off('click'); // remove ALL handlers for the event