Js給dom元素綁定事件的處理函數總的來說有兩種方式:在html文檔中綁定,在js代碼中綁定。
然而,並不推薦在html標簽上綁定事件。
在js代碼中也可以分兩種方式綁定事件:
1:通過dom元素的onclick等屬性,直接綁定;
2:
a.在ie下使用attachEvent/detachEvent函數的方式進行事件的綁定和取消;
b.使用W3C標准的addEventListener和removeEventListener,給dom添加事件監聽者和移除。
第一種方式只能綁定一個事件處理函數,后面的會覆蓋前面的。不存在事件處理函數的執行順序問題。
在第二種方式中attachEvent和addEventListener的方法都可以綁定多個事件處理函數,而不會被覆蓋。兩者除了兼容性問題以外,還有其他區別:
1:this的含義,attachEvent中this是window,addEventListener中的this是綁定的dom對象呀;
2:attachEvent僅支持事件冒泡,addEventListener可以支持事件冒泡,也支持事件捕獲;
事件處理函數的執行順序:
1.如果通過addEventListener或attachEvent方法給同一個事件綁定多個處理函數,先綁定的先執行。不涉及事件冒泡和事件捕獲的問題。
2.如果在addEventListener函數的第三個參數中設置了事件冒泡或者事件捕獲的情況,那么:先調用捕獲階段的處理函數,其次調用目標階段的處理函數,最后調用冒泡階段的處理函數。
其中,目標階段函數的執行順序:先注冊的先執行,后注冊的后執行。
阻止事件冒泡和捕獲的方法:
IE8以及以前可以通過 window.event.cancelBubble=true;阻止事件的繼續傳播;
IE9+/FF/Chrome通過event.stopPropagation();阻止事件的傳播。