前言
封装一个能够兼容多浏览器的 JavaScript 库 EventUtil 。
完整封装代码
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; } }, getEvent:function(event){ return event?event :window.event; }, getTarget:function(event){ return event.target || event.srcElement; }, preventDefault:function(event){ if(event.preventDefault){ event.preventDefault(); }else{ event.returnValue=false; } }, 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; } }, stopPropagation:function(event){ if(event.stopPropagation){ event.stopPropagation(); }else{ event.cancelBubble=true; } }, getCharCode:function(event){ if(typeof event.charCode=="number"){//在不支持的浏览器中值是undefined return event.charCode; }else{ return event.keyCode; } } };
为保证处理事件的代码在大多数浏览器下一致运行,只需要关注冒泡阶段。
每部分功能使用
添加事件: addHandler
var elem = document.getElementById('elemId'); EventUtil.addHandler(elem,'click',function(){ });
移除事件: removeHandler
var elem = document.getElementById('elemId'); EventUtil.removeHandler(elem,'click',function(){ });
需要和 addHandler 参数一致;还有,匿名函数无法移除!
获取事件对象: getEvent
var elem = document.getElementById('elemId'); elem.onclick=function(event){ event=EventUtil.getEvent(event);//这行代码添加到开头,确保随时可以使用event对象,不必担心用户使用的什么浏览器 //....这里随时可以使用event对象 };
获取目标元素: getTarget
var elem = document.getElementById('elemId'); elem.onclick=function(event){ event=EventUtil.getEvent(event); var target=EventUtil.getTarget(event); };
取消事件默认行为: preventDefault
var elem = document.getElementById('elemId'); elem.onclick=function(event){ event=EventUtil.getEvent(event); EventUtil.preventDefault(event); };
阻止事件冒泡: stopPropagation
var elem = document.getElementById('elemId'); elem.onclick=function(event){ event=EventUtil.getEvent(event); EventUtil.stopPropagation(event);//阻止事件冒泡 } document.body.onclick=function(event){ // 这个事件不会触发 alert("Body clicked"); }
获取字符编码: getCharCode
var elem = document.getElementById('elemId'); elem.onclick=function(event){ event=EventUtil.getEvent(event); console.log( EventUtil.getCharCode(event) );//获取字符编码 }