javascript
JS中如何阻止事件的传播
一個事件發(fā)生后,會在子元素和父元素之間傳播(propagation)。這種傳播分成三個階段。這種三階段的傳播模型,使得同一個事件會在多個節(jié)點上觸發(fā)。
- 第一階段:從window對象傳導到目標節(jié)點(上層傳到底層),稱為“捕獲階段”(capture phase)。
- 第二階段:在目標節(jié)點上觸發(fā),稱為“目標階段”(target phase)。
- 第三階段:從目標節(jié)點傳導回window對象(從底層傳回上層),稱為“冒泡階段”(bubbling phase)。
如果希望事件到某個節(jié)點為止,不再傳播,可以使用事件對象的stopPropagation方法。stopPropagation方法阻止事件在 DOM 中繼續(xù)傳播,防止再觸發(fā)定義在別的節(jié)點上的監(jiān)聽函數(shù),但是不包括在當前節(jié)點上其他的事件監(jiān)聽函數(shù)。
// 事件傳播到 p 元素后,就不再向下傳播了 p.addEventListener('click', function (event) {event.stopPropagation(); }, true);// 事件冒泡到 p 元素后,就不再向上冒泡了 p.addEventListener('click', function (event) {event.stopPropagation(); }, false);案例:
(1)不阻止事件傳播的情況
(2)使用stopPropagation阻止事件傳播,可以看出外層的div綁定的click事件沒有觸發(fā)。
stopPropagation方法只會阻止事件的傳播,不會阻止該事件觸發(fā)<p>節(jié)點的其他click事件的監(jiān)聽函數(shù),也就是說后邊綁定的click監(jiān)聽函數(shù)可以正常觸發(fā)。
(3)使用stopImmediatePropagation
如果想要徹底取消該事件,不再觸發(fā)后面所有click的監(jiān)聽函數(shù),可以使用stopImmediatePropagation方法。
stopImmediatePropagation方法阻止同一個事件的其他監(jiān)聽函數(shù)被調(diào)用,不管監(jiān)聽函數(shù)定義在當前節(jié)點還是其他節(jié)點。也就是說,該方法阻止事件的傳播,比stopPropagation()更徹底。
如果同一個節(jié)點對于同一個事件指定了多個監(jiān)聽函數(shù),這些函數(shù)會根據(jù)添加的順序依次調(diào)用。只要其中有一個監(jiān)聽函數(shù)調(diào)用了stopImmediatePropagation方法,其他的監(jiān)聽函數(shù)就不會再執(zhí)行了。
p1.addEventListener('click',function (event) {// 使得后面綁定的所有click監(jiān)聽函數(shù)都不再觸發(fā),但是當前的還是可以正常觸發(fā)event.stopImmediatePropagation();console.log(1); });前端學習交流QQ群,群內(nèi)學習討論的氛圍很好,大佬云集,期待您的加入:862748629 點擊加入
總結(jié)
以上是生活随笔為你收集整理的JS中如何阻止事件的传播的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php strtok函数,strtok函
- 下一篇: gradle idea java ssm