html如下:
<div class="turnTo">點擊跳轉(zhuǎn)?
? ? ? ? <span class="pop">彈框彈出</span>
</div>
給外層div注冊點擊事件使其跳轉(zhuǎn)到另一頁面浆劲,給span注冊點擊事件享甸,彈框彈出;
但是點擊span時梳侨,彈框彈出后頁面也跳轉(zhuǎn)了蛉威。
解決這個問題我們先來了解下
DOM的事件對象:
preventDefault() 取消事件的默認行為
stopPropagation() 取消事件冒泡對當前節(jié)點無影響
cancelBubble() 取消事件冒泡
DOM事件處理有三個階段:
捕捉階段(capture phase):從最上層元素,直到最下層(你點擊的那個target)元素走哺。路過的所有節(jié)點都可以捕捉到該事件蚯嫌。
命中階段(target phase):如果該事件成功到達了target元素,它會進行事件處理丙躏。
冒泡階段(bubbling phase):事件從最下層向上傳遞择示,依次觸發(fā)父元素的該事件處理函數(shù)。
在任意一個階段的事件處理函數(shù)中晒旅,都可以通過調(diào)用event.prepagation()來中斷事件流栅盲,后續(xù)的階段將不會被調(diào)用。
回歸正題废恋。我們可以在觸發(fā)子元素的事件中谈秫,事件處理完成后扒寄,加一個return false,即可阻止父元素事件的觸發(fā)。
return false做了三件事:
stopPropagation()阻止事件傳播
preventDefault()禁止瀏覽器默認行為
立即結(jié)束當前函數(shù)并且返回
簡單粗暴拟烫。
$(".pop").click(function (e) {
? ? ? ? $('.mask-big').show();
? ? ? ? return false;
}