我有一个无法修改代码的网页,我只能在某些地方添加一些 javascript/jquery。
好吧,已经有一个带有与之关联的点击事件的图像。因为我知道元素 CLASS,所以我添加了自己的点击事件监听器:
$(".co-page-link").click(function(e) {
....
}
问题是我的 click 事件在先前定义的事件之前触发,我想更改此行为。怎样才能做到这一点?
谢谢。
我有一个无法修改代码的网页,我只能在某些地方添加一些 javascript/jquery。
好吧,已经有一个带有与之关联的点击事件的图像。因为我知道元素 CLASS,所以我添加了自己的点击事件监听器:
$(".co-page-link").click(function(e) {
....
}
问题是我的 click 事件在先前定义的事件之前触发,我想更改此行为。怎样才能做到这一点?
谢谢。
如果没有其他点击处理程序,您可以颠倒绑定处理程序的顺序:
[].reverse.call($._data($('.co-page-link')[0]).events.click);
如果有多个元素具有类“.co-page-link”,请考虑使用循环。
请注意,此方法不受公开支持,语法可能因版本而异。在较旧的 jquery 版本中,使用$.data()
.
对于更多处理程序,如果您希望最后一个处理程序成为第一个被解雇的处理程序,您可以像这样取消移动处理程序:
//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
});
这样做的缺点是,如果其他代码阻止冒泡,它就不起作用,但你可以尝试一下。