更改多次单击事件对同一元素的优先级

Change precedence of multiple click event over the same element

本文关键字:元素 优先级 事件 单击      更新时间:2023-09-26

我有一个网页,代码无法修改,我只需要在某些地方添加一些javascript/jquery。

好吧,已经有一个与点击事件相关联的图像了。正如我所知道的元素CLASS,我添加了我自己的点击事件监听器:

$(".co-page-link").click(function(e) {
    ....
}

问题是我的点击事件在之前定义的事件之前触发,我想改变这种行为。如何做到这一点?

谢谢。

如果没有其他点击处理程序,您可以颠倒绑定处理程序的顺序:

[].reverse.call($._data($('.co-page-link')[0]).events.click);

如果存在多个类为".co-page link"的元素,请考虑使用循环。

请注意,此方法不受公开支持,不同版本的语法可能不同。在较旧的jquery版本中,请使用$.data()

对于更多的处理程序,如果您希望最后一个hanlder成为第一个被解雇的hanlder,您可以这样取消hanlder:

//set this handler in first with keeping other already bound events
var myH = $._data( $(".co-page-link")[0], "events" ).click.pop();
$._data( $(".co-page-link")[0], "events" ).click.unshift(myH);

"问题是我的点击事件在之前定义的事件之前触发,我想改变这种行为。"

与jQuery绑定的事件处理程序总是按照绑定的顺序调用,但如果有其他未使用jQuery的处理程序绑定,则它们的顺序可能会因绑定方式而异(并且可能因浏览器而异)。

但是,直接绑定的处理程序是在委托处理程序绑定到父元素或文档之前调用的,因此,如果您在文档级别绑定委托处理程序,那么任何直接绑定到图像的处理程序都将在事件出现之前执行,因此您的处理程序将在之后启动:

$(document).on("click", ".co-page-link", function(e) {
    // your code
});

这样做的缺点是,如果其他代码阻止冒泡,它就不会起作用,但你可以尝试一下。