jQuery中的stopImmediatePropagation與stopPropagation的區(qū)別
有這么個需求。要在一個文本框上監(jiān)聽兩個事件,例如:<script type="text/javascript">
$(function(){
$("#t").keyup(function(e){
$("#s").html("keyup1");
//stopImmediatePropagation可以阻止在這之后綁定的事件
//比較注釋和不注釋這一行的區(qū)別
e.stopImmediatePropagation();
});
$("#t").keyup(function(e){
$("#s").html("keyup2");
});
});
</script>
<input type="text" id="t" name="" value="" />
<span class="" id="s"></span>
$(function(){
$("#t").keyup(function(e){
$("#s").html("keyup1");
//stopImmediatePropagation可以阻止在這之后綁定的事件
//比較注釋和不注釋這一行的區(qū)別
e.stopImmediatePropagation();
});
$("#t").keyup(function(e){
$("#s").html("keyup2");
});
});
</script>
<input type="text" id="t" name="" value="" />
<span class="" id="s"></span>
如果在第一個事件中需要阻止第二個事件的執(zhí)行可以在第一個事件中使用event.stopImmediatePropagation方法。jQuery的event的對象是增強(qiáng)的event對象,
stopImmediatePropagation就是jQuery獨(dú)有的一種阻止jQuery綁定事件機(jī)制。可以通過isImmediatePropagationStopped()來判斷是否阻止了jQuery立即冒泡。
stopImmediatePropagation就是jQuery獨(dú)有的一種阻止jQuery綁定事件機(jī)制。可以通過isImmediatePropagationStopped()來判斷是否阻止了jQuery立即冒泡。
stopImmediatePropagation的實(shí)現(xiàn)可以參見我之前的一篇文章,從jQuery的緩存到事件監(jiān)聽
在這篇文章中提到j(luò)Query將事件都緩存在一個數(shù)組中按照先后順序執(zhí)行。如果stopImmediatePropagation就停止執(zhí)行數(shù)組中的監(jiān)聽函數(shù)。
stopPropagation是阻止默認(rèn)事件監(jiān)聽函數(shù)。不是jQuery獨(dú)有,阻止默認(rèn)事件的冒泡,比如監(jiān)聽了DOM節(jié)點(diǎn)和該節(jié)點(diǎn)的父節(jié)點(diǎn)的事件,默認(rèn)是事件執(zhí)行將從里到外,這就是所謂的冒泡。在IE9-瀏覽器中可以使用event.cancelBubble=false來做到,標(biāo)準(zhǔn)瀏覽器使用event.stopPropagation方法。jQuery也把stopPropagation擴(kuò)展方式到IE上這樣有了一致的方法。
綜上所述,其實(shí)stopImmediatePropagation與stopPropagation就不是一個東西,所以也不存在什么區(qū)別了。
參考資料
http://api.jquery.com/event.stopImmediatePropagation/
http://stackoverflow.com/questions/5299740/jquery-stoppropagation-vs-stopimmediatepropagation
http://api.jquery.com/event.stopImmediatePropagation/
http://stackoverflow.com/questions/5299740/jquery-stoppropagation-vs-stopimmediatepropagation
posted on 2011-05-06 18:04 衡鋒 閱讀(3249) 評論(2) 編輯 收藏 所屬分類: javascript 、Jquery 、Web開發(fā)