DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> JavaScript基礎知識 >> 淺析JavaScript事件流——冒泡
淺析JavaScript事件流——冒泡
編輯:JavaScript基礎知識     

一、什麼是事件冒泡流

我們知道事件流指的是從頁面中接受事件的順序。

為了形象理解事件冒泡,可以想象三軍主將諸葛亮,在帳內運籌帷幄,眼觀六路耳聽八方,這時候前方的戰事情況就需要靠傳令兵來傳達,當第一位傳令兵接到士官戰事信息,打出旗語,百米之外的第二個傳令兵看到後打出同樣的旗語,第三個,第四個....,直到信息傳到諸葛亮手中。用專業術語解釋就是:當一個元素上的事件被觸發的時候,比如說鼠標點擊了一個按鈕,同樣的事件將會在那個元素的所有祖先元素中被觸發。這一過程被稱為事件冒泡;這個事件從原始元素開始一直冒泡到DOM樹的最上層。

(還有一種事件流為捕獲,可以理解為諸葛亮向戰場上的某位士官發布指令的過程)

二、事件冒泡的用處

1、事件委托

就是把事件處理器(或監聽器)添加到parent元素上,避免把其添加到多個子元素上。

<div id="out">
    <span>我是span標簽</span>
    <a href="###">我是a標簽</a>
</div>
<script>
var out=document.getElementById('out');
out.onclick=function (ev){
    var tags=out.children;
    var event=ev||window.event;
    var target=event.target||event.srcElement;    
    // event.target//火狐 事件目標   
    // event.srcElement//IE  事件源
    for (var i = 0; i < tags.length; i++) {
        tags[i].style.background='';
    };
    target.style.background='green';      //目標對象背景顏色改變
}
</script>

2、讓不同對象捕獲同一事件

這個其實是給不同對象綁定相同的觸發事件,比如點擊onclick,當點擊其中一個的話,所有這些對象就會觸發各自所對應的函數操作。

<div>
        <span id="sp1">123
                <span id="sp2">456
                        <span id="sp3">789</span>
                </span>
        </span>    
</div>
<script>
    var sp1=document.getElementById('sp1');
    var sp2=document.getElementById('sp2');
    var sp3=document.getElementById('sp3');
    sp1.onclick=function(){
        alert("123");
    }
    sp2.onclick=function(){
        alert("456");
    }
    sp3.onclick=function(){
        alert("789");
    }
</script>

三、阻止事件冒泡

先要清楚什麼時候需要阻止事件冒泡:比如document上有A事件,div有B事件,div裡的span有C事件(ABC是同類型事件,比如都是onclick),若不給div和span阻止事件冒泡的話,點擊span時就會觸發到B、C事件。所以事件冒泡可能會激活我們本來不想激活的事件,導致程序錯亂,所以必要時,我們要阻止事件冒泡。

阻止冒泡事件要考慮浏覽器的兼容問題:

if(Event.stopPropagation){
            Event.stopPropagation();      //非IE
}else{
            Event.cancelBubble=true;    //IE
}


四、冒泡排序算法(雖然和JavaScript中的冒泡事件沒多大關系,了解一下也不是壞事)

冒泡排序(Bubble Sort),是一種計算機科學領域的較簡單的排序算法。 它重復地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重復地進行直到沒有再需要交換,也就是說該數列已經排序完成。(來自百度百科) 冒泡排序算法的運作如下:(從後往前)
  1. 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
  2. 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。
  3. 針對所有的元素重復以上的步驟,除了最後一個。
  4. 持續每次對越來越少的元素重復上面的步驟,直到沒有任何一對數字需要比較。

JavaScript冒泡排序:

function bubbleSort(arr) {
    var i = arr.length, j;
    var tempExchangVal;
    while (i > 0) {
        for (j = 0; j < i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                tempExchangVal = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = tempExchangVal;
            }
        }
        i--;
    }
    return arr;
}
 
var arr = [3, 2, 4, 9, 1, 5, 7, 6, 8];
var arrSorted = bubbleSort(arr);
console.log(arrSorted);
alert(arrSorted);
XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved