跨瀏覽器事件處理程式
阿新 • • 發佈:2018-12-18
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是指該元素物件。