DOM的浏览器兼容性问题:
事件模型:
DOM:3个阶段:javascript
事件绑定:java
DOM: elem.addEventListener(“click”,function(){},false)
#第三个参数capture: 是否在捕获阶段就提早触发web
IE8: elem.attachEvent(“onclick”,function(){})
移除事件:浏览器
DOM: elem.removeEventListener(“click”,function(){},false) IE: elem.detachEvent(“onclick”,function(){})
得到事件对象的方法:svg
DOM: elem.addEventListener(“click”,function(e){ e->event })
IE8: 不会自动传入事件对象e
事件对象event始终保存在一个全局变量window.event中函数
elem.attachEvent(“onclick”,function(){ var e=window.event })
e=e||window.event;
得到目标元素:
DOM: e.target
IE8: e.srcElementthis
var target=e.target||e.srcElement;
阻止冒泡:
DOM: e.stopPropagation()
IE8: e.cancelBubble=true;spa
if(e.cancelBubble!==undefined){//IE8 e.cancelBubble=true; }else{//DOM e.stopPropagation() }
阻止默认行为:
DOM: e.preventDefault();
IE8: 事件处理函数中: e.returnValue=false; 或return value3d
if(typeof e.preventDefault!==”function”){//IE8 e.returnValue=false; //return false }else{//DOM e.preventDefault(); }
定义一个函数,能够支持全部浏览器中的处理函数绑定:code
function bindEvent(elem, eventName, handler){ if(typeof elem.attachEvent!==”function”){//DOM elem.addEventListener(eventName,handler) }else{//IE8 elem.attachEvent(“on”+eventName,function(){ //this->elem var e=window.event; e.target=e.srcElement; handler.call(this,e) }) } } bindEvent(btn, “click”, function(e){ this//当前事件冒泡到的父元素 var target=e.target; //目标元素 })