冒泡事件和預設事件是兩回事!

2021-08-07 12:08:48 字數 2346 閱讀 1613

什麼是事件冒泡?

先上**看,思考以下**的執行結果~~

id="box1">

id="box2">div>

div>

var obox2=document.getelementbyid('box2');

var obox1=document.getelementbyid("box1");

obox2.addeventlistener('touchstart', touchstartbox2,false);

obox2.onclick=function

(e)obox1.addeventlistener('touchstart', touchstartbox1,false);

obox1.onclick=function

()function

touchstartbox2

(e)function

touchstartbox1

(e)

以上**中,box2和box1都有touch事件和click事件。觸發box2的touch事件,box1的touch事件也會執行。這個叫事件冒泡

什麼是預設事件?

還是以上**,觸發touch事件300ms後會觸發click事件,這是乙個預設事件

有了以上兩個概念,重新思考以上**的執行結果。看看和你想的一樣不?

執行結果 :

children bubble   //先執行box2的touch事件

parent bubble //然後執行box1的touch事件

children default

//300ms後執行box2的預設事件click

parent

default

300ms後執行box1的預設事件click

現在,應該大致有乙個冒泡和預設事件的概念了吧,冒泡,顧名思義,一級一級element元素往上走,預設事件,乙個element上的不同事件。

那麼,阻止冒泡可以阻止預設事件嗎?

先看**及結果然後進行分析:

function

touchstartbox2

(e)

結果如下:

children bubble //box2觸發touch事件

children default

// box2觸發click事件

parent

default

// box1觸發click事件

想一下,阻止冒泡的話,box2 的 touch 事件不會冒泡到 box1 的 touch 事件,那麼:

box2 的 touch事件會觸發後

(1) box1 的 touch不會觸發 (因為box2的touch阻止冒泡了,注意注意注意:click事件沒有阻止冒泡)

(2) box2的 click 觸發說了冒泡是一級一級的影響不同的element,那麼不會影響 box2 的 click (因為這個click是touch 觸發300ms後會預設觸發的,還在box2上面)

(3) box1 觸發click事件,因為 box2 觸發了click事件,box2的click事件沒有阻止冒泡,因此box2的click冒泡到了 box1 的 click(此時,box2 的click是預設事件,box1的click事件是冒泡事件)

結論:阻止冒泡沒有阻止預設事件。且在哪個事件裡面新增阻止冒泡,阻止的只是該事件的冒泡!

阻止預設事件可以阻止冒泡嗎?

還是先看例子~~

function

touchstartbox2

(e)

執行結果:

children bubble

parent bubble

分析:

box2 阻止預設事件後

(1) box2 的click不執行(被阻止)

(2) box1的touch事件執行(沒有阻止冒泡)

(3) box1的click不執行(阻止預設事件所有元素的預設事件都會被阻止)

結論:阻止預設事件不會阻止冒泡

總結而言:阻止冒泡和阻止預設行為沒啥關係,阻止冒泡只阻止當前事件的冒泡,不會阻止其他事件冒泡,也不會阻止預設事件。阻止預設事件同樣不會阻止冒泡,但是會把預設事件都阻止掉。

想象和做真的是兩回事啊!

眼看大四了,每當寢室兄弟出去喝酒時,都有些感嘆大學生活真快啊,特別是頭幾天看到大四的同學畢業,都為找工作而奔波時,心裡更不是好滋味。這學期放假沒回家,班上好多同學都沒回,有點在這尋找實踐經驗,有點在這培訓。而我心裡想到的就是希望利用這個暑期好好學學專業知識。以後能找份工作,一天最多只能堅持兩三個小時...

js阻止冒泡事件和預設事件

event.stoppropagation 這個event要通過引數傳遞過來,不然可能有的瀏覽器 比如火狐 不能識別event 要像這麼寫 nclick init.toggleuserinfo this,event init.toggleuserinfo function target,event ...

阻止事件冒泡,阻止預設事件

阻止事件冒泡 html 冒泡事件測試 js table click function td click function span click function e 如果js中不加 e.stoppropagation 那輸出結果就依次為span td table。這就叫事件冒泡。就是從下到上,從裡到...