jquery中stopImmediatePropagation和stopPropagation

案例:

需求:当class为shop-select-no时,点击区域只执行shop-select-no的点击事件;当class为shop-select-yes时,点击区域只执行shop-select-yes的点击事件;

HTML:
<div class="shop-select-no">
</div>


JS:
$('#main').on('click','.shop-select-no',function (e) {
    e.stopImmediatePropagation();
    //e.stopPropagation()
    $(this).removeClass("shop-select-no").addClass("shop-select-yes");
});

$('#main').on('click','.shop-select-yes',function (e) {
    e.stopImmediatePropagation();
    //e.stopPropagation()
    $(this).removeClass("shop-select-yes").addClass("shop-select-no");
});

概念:

stopImmediatePropagation :

阻止事件流中当前节点的和所有后续节点的事件监听器的执行。即影响当前结点的事件监听器。

stopPropagation:

阻止事件流中当前节点的所有后续节点的事件监听器的执行。即不会影响当前节点(currentTarget)的任何事件监听。

所以上述案例中,如果使用stopPropagation,则点击一次后,两个点击事件同时会执行,使用stopImmediatePropagation才能只执行一次

案例2:

// 注册顺序,就是代码的执行顺序 
$("#button1").click(function(event){ 
    alert(1); 
}); 

$("#button1").click(function(event){ 
    alert("2before"); 
    event.stopImmediatePropagation(); 
    //event.stopPropagation(); 
    alert("2after"); 
}); 

$("#button1").click(function(event){ 
    alert(3); 
});

如果使用的是stopPropagation,执行结果是1–>2before–>2after–>3;

如果使用的是stopImmediatePropagation,执行结果是1–>2before–>2after;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值