1. 程式人生 > >跨瀏覽器事件處理程式

跨瀏覽器事件處理程式

var EventUtil = {

    addHandler: function(element, type, handler){
        if (element.addEventListener){
            element.addEventListener(type, handler, false);
        } else if (element.attachEvent){
            element.attachEvent("on" + type, handler);
        } else {
            element["on" + type] = handler;
        }
    },
    removeHandler: function(element, type, handler){
        if (element.removeEventListener){
            element.removeEventListener(type, handler, false);
        } else if (element.detachEvent){
            element.detachEvent("on" + type, handler);
        } else {
            element["on" + type] = null;
        }
    }
};

這裡的使用了能力檢測,先檢測是否支援DOM2,如果支援就執行addEventListener,如果不支援就檢測是否支援IE,如果支援就執行attachEvent,如果不支援IE,才執行DOM0方式。

注意:

1、DOM0級對每個事件只支援一個事件處理程式 ,就是說:

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

      btn.onclick = function(){

            console.log(this.id)

      }//無效

     btn.onclick = function(){

            console.log("hello world")

      }

 只能執行打印出hello world

2、IE事件處理程式attachEvent()與使用DOM0級方法的注意區別是在於事件處理程式的作用域

var btn = document.getElementById("myBtn");
btn.attachEvent("onclick", function(){
     alert(this === window); //true
});

在事件處理函式中,IE事件的this是全域性的,跟window是一樣的,DOM0的this是指該元素物件。