我已按以下方式设置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事件发生,但正如我所说,我认为这不可靠.