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