如果将两个或多个事件处理程序附加到HTML元素,它们将会一个接一个执行。但是,如果要根据第一个处理程序中检查的条件停止后续事件处理程序,那么应该怎么办?
例如:
<div id='target'> </div> <p id='result'> </p>
如果第一个处理程序被取消,我想取消第二个处理程序。
$(function() { var target = $('#target'),result = $('#result'); target.click(function(e) { result.append('first handler<br />'); // Here I want to cancel all subsequent event handlers }); target.click(function(e) { result.append('second handler<br />'); }); });
你可以看到小提琴here。
PS:我知道e.preventDefault()阻止HTML元素的默认动作(例如,阻止由于点击链接而发送HTTP GET请求),e.preventPropagation()导致事件被传播到DOM树中的父元素。我也知道,可以使用一个中间变量,在第一个处理程序中将其设置为true,并在后续处理程序中检查它。但我想看看是否有一个更整洁,先进的解决方案这个问题或不。
解决方法
请参见event.stopImmediatePropagation() –
http://api.jquery.com/event.stopImmediatePropagation/
根据jQuery API文档,这个方法:
Keeps the rest of the handlers from being executed and prevents the event from bubbling up the DOM tree.