成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

javaScript跨瀏覽器事件處理程序

terasum / 2524人閱讀

摘要:在事件處理,事件對象,阻止事件的傳播等方法或?qū)ο蟠嬖谥鵀g覽器兼容性問題,開發(fā)過程中最好編寫成一個通用的事件處理工具。上面的中事件的執(zhí)行都發(fā)生了目標(biāo)階段事件對象的屬性用來表示事件處理發(fā)生在事件流哪個階段。

最近在閱讀javascript高級程序設(shè)計,事件這一塊還是有很多東西要學(xué)的,就把一些思考和總結(jié)記錄下。
在事件處理,事件對象,阻止事件的傳播等方法或?qū)ο蟠嬖谥鵀g覽器兼容性問題,開發(fā)過程中最好編寫成一個通用的事件處理工具。

(function(){
    var EU = {};
    //...
    //在這里添加一些通用的事件處理方法
    //...
    window.EventUtil = EU;
})();
事件處理程序

事件的綁定主要為IE8以下瀏覽器做兼容處理:

IE8以下只支持事件冒泡
IE事件處理使用attachEvent detachEvent

綁定事件
EU.addHandler = function(element,type,handler){
    //DOM2級事件處理,IE9也支持
    if(element.addEventListener){
        element.addEventListener(type,handler,false);
    }
    else if(element.attachEvent){
        //type加"on"
        //IE9也可以這樣綁定
        element.attachEvent("on" + type,handler);
    }
    //DOM0級事件處理步,事件流也是冒泡
    else{
        element["on" + type] = handler;
    }
};
取消綁定事件

和綁定事件的處理基本一致,有一個注意點(diǎn):

傳入的handler必須與綁定事件時傳入的相同(指向同一個函數(shù))

EU.removeHandler = function(element,type,handler){
    if(element.removeEventListener){
        element.removeEventListener(type,handler);
    }
    else if(element.attachEvent){
       element.detachEvent("on" + type,handler);
    }
    else{
        //屬性置空就可以
        element["on" + type] = null;
    }
};
事件對象

注意點(diǎn):

IE下event是全局對象,通過window.event取得

EU.getEvent = function(event){
    return event || window.event;
}
事件的目標(biāo)

注意點(diǎn):

IE下通過attachEvent綁定事件,內(nèi)部this并非觸發(fā)事件的DOM,而是window;
通過目標(biāo)對象來獲取DOM節(jié)點(diǎn),IE下是srcElement屬性,等同于其他瀏覽器的target屬性

EU.addTarget = function(event){
    return event.target || event.srcElement;
}
阻止默認(rèn)事件
EU.preventDefault = function(event){
    if(event.preventDefault){
        event.preventDefault();
    }
    //IE下處理
    else{
        event.returnValue = false; //默認(rèn)為true
    }
}

關(guān)于事件默認(rèn)行為

阻止事件傳播
EU.stopPropagation = function(event){
    if(event.stopPropagation){
        event.stopPropagation();
    }
    //IE下處理
    else{
        event.cancelBubble = true;//默認(rèn)為false,注意區(qū)分于returnValue
    }
}

注意點(diǎn):

阻止的是DOM層級間的事件傳播

比如:對于一個DOM元素,同時綁定捕獲事件與冒泡事件,如果在捕獲階段使用stopPropagation,不會阻斷冒泡事件的執(zhí)行;(事件捕獲早于事件冒泡)

Demo地址:http://jsfiddle.net/0sfck15b/

如果對子元素和父元素以冒泡形式都綁定"click"事件,在子元素的事件處理中使用stopPropagation阻止事件傳播,父元素綁定的click事件不會執(zhí)行。
Demo地址:http://jsfiddle.net/av6yebsw/

上面的劃掉的地方理解有誤,更正下。上面的demo中事件的執(zhí)行都發(fā)生了目標(biāo)階段,事件對象eventeventPhase屬性用來表示事件處理發(fā)生在事件流哪個階段。
對應(yīng)關(guān)系 1:捕獲階段,2: 處于目標(biāo),3: 冒泡階段
還有一點(diǎn):

目標(biāo)階段并不一定先發(fā)生捕獲階段所綁定的事件,先綁定先執(zhí)行

demo演示: http://jsfiddle.net/h52xwkrh/
但不變的是對同一個DOM無論在捕獲階段還是在冒泡階段使用ev.preventDefault(),都不會阻止另一個事件執(zhí)行

歡迎討論交流!如果文章對你有幫助,點(diǎn)下面的推薦鼓勵下唄(?>?

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/85917.html

相關(guān)文章

  • js中DOM事件探究

    摘要:提出的事件流是事件冒泡流,提出的事件流是事件捕獲流。事件冒泡流事件開始時,由最具體的元素文檔中嵌套層次最深的哪個節(jié)點(diǎn)接收,逐級上傳到最不具體的元素文檔。事件處理程序,級事件處理程序,級事件處理程序,事件處理程序。 事件 綱要 理解事件流 使用事件處理程序 不同的事件類型 javascript和html的交互是通過事件實(shí)現(xiàn)的。事件就是文檔或?yàn)g覽器窗口發(fā)生的一些特定交互瞬間??梢允褂脗?..

    icattlecoder 評論0 收藏0
  • 覽器事件處理程序實(shí)現(xiàn)總結(jié)

    摘要:本文章需要一些前置知識事件基礎(chǔ)知識對象詳解圍繞著如何更好地實(shí)現(xiàn)一個跨瀏覽器的事件處理小型庫展開討論。處理垃圾回收過濾觸發(fā)或刪除一些處理程序解綁特定類型的所有事件克隆事件處理程序依照這樣的一個思路,我們來一步步實(shí)現(xiàn)這樣一個模塊。 本文章需要一些前置知識 事件基礎(chǔ)知識 event對象詳解 圍繞著如何更好地實(shí)現(xiàn)一個跨瀏覽器的事件處理小型庫展開討論。 1. 初步實(shí)現(xiàn) 在《JavaScrip...

    CHENGKANG 評論0 收藏0
  • Javascript事件(一)

    摘要:事件流事件流描述的是頁面接收事件的順序的事件流是冒泡流而的事件流是事件捕獲流事件冒泡是指事件開始時由最具體的元素,然后向上傳播到較為不具體的節(jié)點(diǎn)所有現(xiàn)代瀏覽器都支持事件冒泡則將事件一直冒泡到對象事件捕獲是不太具體的節(jié)點(diǎn)應(yīng)該更早接收到事件而具 事件流 事件流描述的是頁面接收事件的順序.IE的事件流是冒泡流,而 Netscape Communicator的事件流是事件捕獲流. 事件冒泡是指...

    ?xiaoxiao, 評論0 收藏0
  • JavaScript事件探秘

    摘要:一事件流事件流描述的是從頁面中接受事件的順序。級事件處理程序級事件定義了兩個方法用于處理指定和刪除事件處理程序的操作和。第二個方法是,它返回事件的目標(biāo)。第三個方法是,用于取消事件的默認(rèn)行為。首先嘗試使用方法阻止事件流,否則就使用屬性。 一、事件流 事件流描述的是從頁面中接受事件的順序。IE的事件流是事件冒泡流,而Netscape的事件流是事件捕獲流 1、事件冒泡 事件冒泡,即事件最開始...

    shuibo 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<