如果我在元素上附加两个单击事件,那么将执行两个处理程序的顺序。我知道jQuery
的执行顺序与附加事件的顺序相同。但我不确定JavaScript的行为。
如果它只是追加事件处理程序,那么如果我想覆盖所有现有事件处理程序,我该怎么办?
答案 0 :(得分:2)
The handlers will execute in the order in which they were bound
DOM3 event spec引入了按注册顺序触发的要求(大多数浏览器都这样做):
接下来,实现必须确定当前目标的候选事件侦听器。这必须是已按注册顺序在当前目标上注册的所有事件侦听器的列表。
目标阶段中的事件将按照注册顺序触发元素上的所有侦听器,而不管useCapture参数如何.-
答案 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