//跨浏览器事件绑定 function addEvent(obj,type,fn){ if(typeof obj.removeEventListener !='undefined'){ /////////////////////////w3c //创建一个数组,保存事件 if(!obj.events) obj.events=[]; //创建数组,保存方法 if(!obj.events[type]) obj.events[type]=[]; //判断数组里是否有数据,有数据检查一下是否有相同的方法 if(obj.events[type].length>0){ if(addEvent.equal(obj.events[type],fn)) { return false; } else { obj.events[type].push(fn); } } else { obj.events[type].push(fn); } obj.addEventListener(type, fn, false); } else { /////////////////////////////////////IE //创建一个数组,保存事件 if(!obj.events) obj.events=[]; //创建数组,保存方法 if(!obj.events[type]) obj.events[type]=[]; //判断数组里是否有数据,有数据检查一下是否有相同的方法 if(obj.events[type].length>0){ if(addEvent.equal(obj.events[type],fn)) { return false; } else { obj.events[type].push(fn); } } else { obj.events[type].push(fn); } //执行事件处理函数 var _this=this; obj['on'+type]=addEvent.exec; } } //执行事件处理函数 addEvent.exec=function(event){ var e =event || window.event; var es = this.events[e.type]; for(var i in es){ es[i].call(this); } } //同一个注册函数进行屏蔽 addEvent.equal=function(es,fn){ for(var i in es){ if(es[i]==fn){ return true; } } return false; } //删除事件 function removeEvent(obj,type){ if(typeof obj.removeEventListener !='undefined'){ ///////////////////////////////////////w3c if(type){ //删除指定事件 //判断删除的事件是否绑定 if(!obj.events[type]) return false; for(var j=0;j<obj.events[type].length;j++){ obj.removeEventListener(type,obj.events[type][j], false); } } else { //清除元素所有事件 for(var eveName in obj.events){ for(var k=0;k<obj.events[eveName].length;k++){ obj.removeEventListener(eveName,obj.events[eveName][k], false); } } } } else { /////////////////////////////////////IE if(type){ //删除指定事件 //判断删除的事件是否绑定 if(!obj.events[type]) return false; for(var j=0;j<obj.events[type].length;j++){ delete obj.events[type][j]; } } else { //清除元素所有事件 for(var eveName in obj.events){ for(var k=0;k<obj.events[eveName].length;k++){ delete obj.events[eveName][k]; } } } } }
addEvent(btn,'click',function(){ alert('事件绑定'); }); //删除click事件 removeEvent(btn,'click'); //删除mouseover事件 removeEvent(btn,'mouseover'); //删除所有事件 removeEvent(btn);
没优化函数,函数中有许多重复代码,因为感觉我写函数的思考不是很好,但是又没别的好想法,没有优化了。
如果哪位大鸟有好的思路或想法,请留言,