多種DOM事件處理程序分析及跨瀏覽器的事件解決方案

一.HTML事件處理程序

<input id="btn" type="button" value="按鈕" onclick="showMsg()">

缺點:高耦合,修改事件的時候需要同時修改js和HTML頁面


二.DOM0級事件

  1. //添加事件

  2. var btn = document.getElementById('btn');

  3. btn.onclick = function(){

  4.    alert('Hello World!');
  5. }

  6. //刪除事件

  7. btn.onclick = null;


三.DOM2級事件   

瀏覽器支持

表格中的數字表示支持該方法的第一個瀏覽器的版本號。

方法          
addEventListener() 1.0 9.0 1.0 1.0 7.0

注意: Internet Explorer 8 及更早IE版本不支持 addEventListener() 方法,,Opera 7.0 及 Opera 更早版本也不支持。 但是,對於這些不支持該函數的瀏覽器,你可以使用 attachEvent() 方法來添加事件句柄 (查看 "更多實例" 瞭解跨瀏覽器的解決方案)。

語法

element.addEventListener(eventfunctionuseCapture)

參數值

參數 描述
event 必須。字符串,指定事件名。

注意: 不要使用 "on" 前綴。 例如,使用 "click" ,而不是使用 "onclick"。 

提示: 所有 HTML DOM 事件,可以查看我們完整的 HTML DOM Event 對象參考手冊
function 必須。指定要事件觸發時執行的函數。 

當事件對象會作爲第一個參數傳入函數。 事件對象的類型取決於特定的事件。例如, "click" 事件屬於 MouseEvent(鼠標事件) 對象。
useCapture 可選。布爾值,指定事件是否在捕獲或冒泡階段執行。

可能值:
  • true - 事件句柄在捕獲階段執行
  • false- false- 默認。事件句柄在冒泡階段執行
  1. var btn = document.getElementById('btn');
  2. function DOM2test = function(){
  3.    alert('test1');
  4. }
  5. function DOM2test2 = function(){
  6.    alert('test2');
  7. }
  8. btn.addEventListener('click',DOM2test1,false);
  9. //可以添加多個事件
  10. btn.addEventListener('click',DOM2test2);
  11. //執行結果,按順序彈窗test1、test2
  12. //刪除事件
  13. btn.removeEventListner('click',DOM2test1,false);//需要指定刪除的具體方法


4.IE事件處理

語法

element.attachEvent(eventfunction)

使用方法和DOM2級事件差不多,但是在傳入的參數中沒有第三個布爾值變量,因爲在IE8版本之前是隻支持冒泡事件的,所以這裏默認爲冒泡事件。

另一個區別是event這裏必須使用"on",比如點擊事件就是onclick。


  1. btn.attachEvent('onclick',showMsg());
  2. //刪除事件
  3. btn.detachEvent('onclick',showMsg());


5.跨瀏覽器的事件處理程序

  1. var eventUtil = {
  2. //添加句柄
  3. //支持DOM2級、IE、DOM0級
  4. addHandler: function (element, type, handler) {
  5. if (element.addEventListener) { //DOM2級
  6. element.addEventListenter(type, handler, false);
  7. }
  8. else if (element.attachEvent) { //IE
  9. element.attachEvent('on' + type, handler);
  10. } else { //DOM0級
  11. element['on' + type] = handler;
  12. }
  13. },
  14. //刪除句柄
  15. removeHandler: function (element, type, handler) {
  16. if (element.romoveEventListener) {
  17. element.romoveEventListenter(type, handler, false);
  18. }
  19. else if (element.detachEvent) {
  20. element.detachEvent('on' + type, handler);
  21. } else {
  22. element['on' + type] = null;
  23. }
  24. }
  25. }
  26. //測試
  27. eventuntil.addHandler(btn, 'click', showMsg());
  28. //刪除
  29. eventuntil.removeHandler(btn, 'click', showMsg());

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章