JS事件流(W3C與IE區別)

1、JS事件的3個階段:捕獲、目標、冒泡,低版本IE不支持捕獲階段;javascript

2、在瀏覽器解析事件的時候,有兩種觸發方式:一種叫作Bubbling(冒泡),另一種叫作Capturing(捕獲)。
冒泡的方式效果就是當一個DOM元素的某事件例如click事件被fire時,依次它的父元素的click事件也被fire(觸發),一直傳遞到最頂層的body元素爲止。而捕獲的觸發方式正好相反,當某個元素的click事件被觸發時,先從最頂層的body元素click事件被觸發開始,一直傳遞到真正被觸發的元素爲止。html

一、W3C事件流:
(1)從根文檔(html)開始遍歷全部子節點,若是目標事件的父節點設置爲捕獲時觸發,則執行該事件,直到目標被執行,而後再事件冒泡(設置爲捕獲時觸發的事件再也不被執行)。
(2)支持冒泡和捕獲方法,而且能夠在一個DOM上綁定多個事件處理器,各自不會衝突,
(3)addEvntListener(removeEventListener)有三個參數:第一個-->事件類型;第二個-->處理函數,直接給函數名或函數體;第三個-->布爾值,表示是否支持捕獲事件;
(4)經過addEventListener和removeEventListener來實現函數的添加和刪除。java

二、ie事件流:
(1)從目標事件被執行,而後再冒泡父節點的事件,直到根文檔;
(2)只支持冒泡,而且能夠在一個dom上綁定多個事件處理函數;
(3)attachEvent(detachEvent)參數與W3C標準相同,注意:事件類型前+on;沒有布爾參數;
(4)經過attachevent和detachevent來實現函數的添加和刪除。瀏覽器

三、阻止某瀏覽器DOM元素的默認行爲:
(1)W3C經過調用e.preventDefault();
(2)IE則經過window.event.returnValue=false;dom

四、阻止冒泡事件:
(1)W3C調用e.stopPropagation();或者 return false;
(2)IE經過設置window.event.cancleBubble=true;函數

五、 javascript 兼容W3c和IE的添加(取消)事件監聽方法:代理

//添加事件監聽兼容函數  
    function addHandler(target, eventType, handler){  
        if(target.addEventListener){//主流瀏覽器  
            addHandler = function(target, eventType, handler){  
                target.addEventListener(eventType, handler, false);  
            };  
        }else{//IE  
            addHandler = function(target, eventType, handler){  
                target.attachEvent("on"+eventType, handler);  
            };        
        }  
        //執行新的函數  
        addHandler(target, eventType, handler);  
    }  
    //刪除事件監聽兼容函數  
    function removeHandler(target, eventType, handler){  
        if(target.removeEventListener){//主流瀏覽器  
            removeHandler = function(target, eventType, handler){  
                target.removeEventListener(eventType, handler, false);  
            }         
        }else{//IE  
            removeHandler = function(target, eventType, handler){  
                target.detachEvent("on"+eventType, handler);  
            }         
        }  
        //執行新的函數  
        removeHandler(target, eventType, handler);  
    }

3、手寫事件模型及事件代理、委託
一、事件代理/委託的優缺點,是靠冒泡機制來實現的:
優勢:
(1)能夠減小大量內存佔用,減小事件註冊;
(2)能夠實現當新增子對象時,無需再對其綁定事件,對於動態內容部分更合適;
缺點:若是全部事件都用事件代理,則可能會出現事件誤判,即本不該該觸發的對象綁上了事件。code

相關文章
相關標籤/搜索