如果将两个或多个事件处理程序附加到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/
Keeps the rest of the handlers from being executed and prevents the event from bubbling up the DOM tree.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。