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

时间:2013-07-04 11:14:59

标签: javascript jquery events click operator-precedence

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

嗯,已经有一个与之关联的点击事件的图像。我知道元素CLASS,我添加了自己的click事件监听器:

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

问题是我的click事件在之前定义的事件之前触发,我想改变这种行为。怎么能实现这个目标?

感谢。

2 个答案:

答案 0 :(得分:1)

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

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

如果有多个“.co-page-link”类的元素,请考虑使用循环。

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

对于更多的处理程序,如果你希望最后一个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);

答案 1 :(得分:1)

  

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

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

但直接绑定的处理程序在绑定到父元素或文档的委托处理程序之前被调用,因此如果在文档级别绑定委托处理程序,则直接绑定到图像的任何处理程序将在事件冒泡之前执行,因此你的经纪人会事后解雇:

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

这样做的缺点是,如果其他代码阻止冒泡,它将无法工作,但这是你可以尝试的。