取消jQuery事件处理

我已按以下方式设置onclick事件处理程序:

element.onclick = function() { /*code */ } 

想象一下,使用jQuery方法bind()或类似的处理程序设置事件处理程序。

 $('element').bind('click', function(){/*another function*/}) 

如何从我刚才描述的处理程序中阻止使用jQuery定义的调用处理程序?

NB stopPropagation()等等.jQuery的方法不适用于该函数,因为它与本机事件对象一起传递。

我不是100%肯定你在问什么,但也许这会有所帮助:

您可以通过jQuery公开的Event构造函数创建一个新的事件对象(符合W3C DOM):

例如:

 element.onclick = function(e) { var aBetterEventObject = jQuery.Event(e); // Now you can do what you want: (Cross-browser) aBetterEventObject.preventDefault() aBetterEventObject.isDefaultPrevented() aBetterEventObject.stopPropagation() aBetterEventObject.isPropagationStopped() aBetterEventObject.stopImmediatePropagation() aBetterEventObject.isImmediatePropagationStopped() } 

编辑:再次阅读你的问题,我不认为传播是问题 – 你似乎想要取消事件处理程序在事件处理程序中运行 – 我不确定这是否可行。 你可以解开所有处理程序( jQuery(elem).unbind(’click’) ),但我不认为这就是你所追求的……

接下来是JimmyP的回答。 我试过这个

 $('#x').click( function(e){ alert('hello'); }); document.getElementById('x').onclick = function(){ $('#x').unbind('click'); alert("goodbye"); } 

在此示例中,jQuery事件运行一次。 我不认为你可以依赖于调用处理程序的顺序但是你定义它们,所以我猜你必须接受jQuery事件可能会触发一次。 首先添加onclick会阻止jQuery事件发生,但正如我所说,我认为这不可靠。

尝试在jQuery事件处理程序中添加以下行:

 return false; 

Jquery有一个命名空间事件的方法。 http://docs.jquery.com/Namespaced_Events

您可以通过命名空间添加,触发和删除绑定到同一事件的单独函数:

 $("a").bind("click.custom1",function(){ ... }); $("a").bind("click.custom2",function(){ ... }); $("a").trigger("click.custom2"); $("a").unbind("click.custom2"); 

只要您取消绑定命名空间事件,您的正常onclick就不会受到影响。 如果不起作用,您可能必须将两个单独的命名空间绑定到click事件。