如何在jQuery中防止其他事件处理程序出现在第一个处理程序中

2020/12/31 15:32 · jquery ·  · 0评论

如果将两个或多个事件处理程序附加到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 />');
    });
});

您可以在这里看到小提琴

PS:我知道这会e.preventDefault()阻止HTML元素的默认操作(例如,防止由于单击链接而发送HTTP GET请求),并e.preventPropagation()导致事件传播到DOM树中的父元素。我也知道可以使用中间变量,在第一个处理程序中将其设置为true,然后在后续处理程序中对其进行检查。但是我想看看是否有一个更简洁,更复杂的解决方案来解决这个问题。

event.stopImmediatePropagation()- http://api.jquery.com/event.stopImmediatePropagation/

根据jQuery API文档,此方法:

使其余处理程序不被执行,并防止事件使DOM树冒泡。

该解决方案是特定于浏览器的。dojo.stopEvent

dojo.stopEvent = function(/*Event*/ evt){
    // summary:
    //        prevents propagation and clobbers the default action of the
    //        passed event
    // evt: Event
    //        The event object. If omitted, window.event is used on IE.
    if(has("dom-addeventlistener") || (evt && evt.preventDefault)){
        evt.preventDefault();
        evt.stopPropagation();
    }else{
        evt = evt || window.event;
        evt.cancelBubble = true;
        on._preventDefault.call(evt);
    }
};

更新的小提琴:http : //jsfiddle.net/pFp7P/1/

本文地址:http://jquery.askforanswer.com/ruhezaijqueryzhongfangzhiqitashijianchulichengxuchuxianzaidiyigechulichengxuzhong.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!