我發(fā)現(xiàn),某個(gè)元素的鼠標(biāo)事件如果通過(guò)其他元素觸發(fā),無(wú)法阻止這個(gè)事件的冒泡過(guò)程。為什么?
我發(fā)現(xiàn)個(gè)問(wèn)題:某個(gè)元素的mousedown事件如果是通過(guò)其他元素觸發(fā)的,那么這個(gè)事件無(wú)法阻止冒泡。最終document上面也會(huì)有這個(gè)事件。
我的試驗(yàn)過(guò)程:首先在document上綁定mouseup,mousedown事件。
在測(cè)試一,我將event.stopPropagation()加到button的事件處理函數(shù)中。當(dāng)我按下鼠標(biāo)時(shí)不會(huì)觸發(fā)document事件處理函數(shù)。
在測(cè)試二,由于p元素的mousedown事件是由btn元素的mousedown事件觸發(fā)的。那么無(wú)論你在哪個(gè)元素內(nèi)的處理函數(shù)內(nèi)加入event.stopPropagation()都不會(huì)阻止事件冒泡,最終都會(huì)在document上觸發(fā)mouseup,mousedown事件。甚至在p元素的父元素div上加入阻止冒泡代碼也沒(méi)有任何效果。
不知道其他同學(xué)是否也發(fā)現(xiàn)了這個(gè)問(wèn)題,能不能解釋下這是為什么???
2016-07-11
正常情況下,假如現(xiàn)在有三個(gè)元素嵌套<div><p><button></button></p></div>,每個(gè)元素綁定一個(gè)click事件。
現(xiàn)在點(diǎn)擊button,將會(huì)冒泡觸發(fā)。然后利用event.stopPropagation()阻止冒泡,OK。
現(xiàn)在將buttom里面的事件改為 $("p").click(),
1、event.stopPropagation() 放在button里面;
? ? ?在不考慮冒泡的情況下,點(diǎn)擊button之后 p的click事件一定會(huì)執(zhí)行,繼而引發(fā)div。冒泡阻止NG。
2、event.stopPropagation() 放在p里面;
? ? ?點(diǎn)擊button事件后,觸發(fā)p的click事件,遇到冒泡阻止,但是button自身也會(huì)觸發(fā)冒泡(即不管button的內(nèi)容是什么都會(huì)觸發(fā)一次p.click()),所以執(zhí)行后應(yīng)該為 p.click()+p.click。冒泡阻止NG。
3、event.stopPropagation() 放在div里面;冒泡阻止NG。
綜上所述,冒泡阻止只會(huì)阻止放置event.stopPropagation()事件的元素,對(duì)于這一種冒泡的阻止,請(qǐng)?jiān)赽utton和p里面都放置event.stopPropagation()。
2016-05-12
0.0.0