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