1. 程式人生 > >JS之事件機制

JS之事件機制

一、繫結事件的3種方式

     1、內聯繫結事件

     2、on+事件名,繫結事件程式

     3、通過addEventListener/removeEventListener繫結事件

          不支援ie9之前的瀏覽器,ie9之前瀏覽器可以通過attachEvent/detachEvent繫結事件

          這兩種處理事件的方法有兩個區別:

          1、獲取事件物件不同:attachEvent需要通過window物件來呼叫事件物件

          2、獲取節點不同:attachEvent事件中需要通過讀取srcElement來獲取,addEventListener通過target

          3、處理阻止冒泡和阻止預設事件不同:阻止冒泡一個通過事件物件呼叫stopPropagation方法,一個通過設定事件物件的cancleBubble為true;

                                                               阻止預設行為一個通過事件物件呼叫preventDefault方法,一個通過設定事件物件的returnValue為false。

 

        

二、事件處理的流程

      事件處理程式繫結的事件只要冒泡階段。

      addEventListener繫結的事件有捕獲和冒泡兩個階段

      捕獲階段:事件觸發從window到目標物件

      冒泡階段:事件觸發從目標物件到window傳播

     addEventListener這個方法的第三個引數預設為false,觸發事件時先捕獲再冒泡,如果設定這個引數為true則沒有冒泡階段。

     addEventListener可以給一個元素同時繫結多個事件,如果同時註冊冒泡和捕獲事件,則按註冊順序執行。

 

三、事件代理

    事件代理就是利用事件冒泡的原理,通過在父元素上繫結事件,來代替在每個子元素上繫結事件,節省了大量重複的事件監聽。

 

參考資料:

文件物件模型事件:https://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-Event

前端工程師手冊:https://leohxj.gitbooks.io/front-end-database/javascript-basic/events.html

https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/Building_blocks/Events