請多多指教;
IE與標準瀏覽器對事件處理的區別
a.事件監聽的區別:
//eventName:事件名,點擊事件click,不用加on;handle函數名
標準瀏覽器:添加事件監聽:element.addEventListener(eventName,handle);
刪除事件監聽:element.removeEventListener(eventName,handle);
刪除事件監聽和添加事件監聽的事件必須是同一個,所以我不建議在添加裡面寫函數。
//eventName事件名,點擊事件onclick,需要加on,handle函數名
IE瀏覽器:添加事件監聽:element.attachEvent(eventName,handle);
刪除事件監聽:element.detachEvent(eventName,handle);
我之間測試這裡時:若是在標準瀏覽器中是不能使用IE的事件,IE中同樣不能使用標準裡面的事件,不讓會報錯不能執行。
為了事件監聽兼容性合併了兩種情況:
var EventUtil = { //element:元素;type:事件類型(不加on,click);handler:函數名或函數 addHandler:function(element,type,handler){ //绑定事件 //Chrome Firefox IE9等 addEventListener //IE8及IE8以下的浏览器 attachEvent 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){ //移除事件 //Chrome Firefox IE9等 //IE8及IE8以下的浏览器 if(element.removeEventListener){ element.removeEventListener(type,handler,false); }else if (element.detachEvent) { element.detachEvent("on"+type,handler); } else{ element["on"+type] = handler } } } //調用方法: EventUtil.addHandler(element,"click",function () { alert("one") })
b.阻止事件冒泡
標準:event.stopPropagation();
IE:event.cancelBubble=true;
兼容:
function stopBubble(e) { //如果提供了事件对象,则这是一个非IE浏览器 if ( e && e.stopPropagation ) //因此它支持W3C的stopPropagation()方法 e.stopPropagation(); else //否则,我们需要使用IE的方式来取消事件冒泡 window.event.cancelBubble = true; }
c.阻止默認事件
標準:event.preventDefault();
IE:event.returnValue=false;
兼容:
//阻止浏览器的默认行为 function stopDefault( e ) { //阻止默认浏览器动作(W3C) if ( e && e.preventDefault ) e.preventDefault(); //IE中阻止函数器默认动作的方式 else window.event.returnValue = false; return false; }
d.對象
標準:event;
IE:window.event
兼容:event=event || window.event;
e.事件源對象
標準:event.target;
IE:event.srcElement;
兼容:function getTarget(event){
return event.target || event.srcElement;
}
最後的整合:
var EventUtil = { addHandler: function(element, type, handler) { //绑定事件 //Chrome Firefox IE9等 addEventListener //IE8及IE8以下的浏览器 attachEvent 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) { //移除事件 //Chrome Firefox IE9等 //IE8及IE8以下的浏览器 if(element.removeEventListener) { element.removeEventListener(type, handler, false); } else if(element.detachEvent) { element.detachEvent("on" + type, handler); } else { element["on" + type] = handler } }, getTarget: function(event) { return event.target || event.srcElement; }, preventDefault: function(event) { if(event.preventDefault) { event.preventDefault(); } else { event.returnValue = false; } }, stopPropagation: function(event) { if(event.stopPropagation) { event.stopPropagation() } else { event.cancelBubble = true; } } }