javascript事件冒泡機制探討

今天學了一個事件冒泡機制,覺得有點問題,就自己測試了一下,和大家分享下結果,有助於幫助大家更好的去理解事件冒泡機制。


舉個例子:

<html>

<head>

<script>

function f1(){

alert('f1');

}

function f2(){

alert('f2');

}

function f3(){

alert('f3');

}

</script>

</head>

<body >

<div style="background-color:red; width:200px; height:200px;">

<div style="background-color:blue; width:100px; height:100px;">

<a onclick="f1();">你好</a>

</div>

</div>

</body>

</html>


你點擊“你好”後,會彈出小框f1,然後彈出f2 f3,然後說,當子標籤產生一個事件後,後冒泡一樣向上傳遞,調用所有onclick的方法。


但是,仔細想下,你會發現一個問題,當你點擊了“你好”,其實你也點擊了包住了“你好”的父標籤,也就是上面的那個div標籤,同時也是點擊了包住div標籤的父標籤,也就是另一個div。所以我就想,其實不是所謂的冒泡,而是,你觸發了多個標籤的相同事件罷了。


所以,我接下來不用 ,下面看例子。


<html>

<head>

<script>

function f1(){

alert('f1');

}

function f2(){

alert('f2');

}

function f3(){

alert('f3');

}

</script>

</head>

<body >

<div style="background-color:red; width:200px; height:200px;">

<div style="background-color:blue; width:100px; height:100px;">

<a onmouseout="f1();">你好</a>

</div>

</div>

</body>

</html>



沒錯,和上面代碼的差別就是把onclick改爲onmouseout,怎麼測試呢?

你先把鼠標放到“你好”字上,然後移出,移出到包住“你好”的div的大小範圍之內,這樣你就觸發了,裏面<a>標籤的onmouseout事件,而並沒觸發,外面的div的onmouseout事件,測試結果是,



出乎意料,還是彈出了f1 f2 f3,也就是說,不管你是不是觸發了外面父標籤的事件,都會調用調用相關的函數,也就是說,冒泡機制這個名字取的很合理,是我想多了,也希望一些在教js課程的老師講清楚點,我們這些菜鳥可能理解的不是很透徹啊,好了,謝謝大家觀賞。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章