首页 > 代码库 > 原生js跨浏览事件绑定(移除)/javascript事件绑定(移除)

原生js跨浏览事件绑定(移除)/javascript事件绑定(移除)

网上找了半天没看到,都是基于ie attachEvent(有诸多的问题存在)来写的,所以手动写了个js模拟绑定事件希望能帮到需要的童鞋


addEvent = function(obj,type,fn){
  if(obj.addEventListener) {//W3C
   obj.addEventListener(type,fn,false);
  }else if (obj.attachEvent) {//ie(期待它的灭亡)
   if(!obj.events) obj.events = {};//创建事件存储哈希表,也是对之后的removeEvent所需要的全局变量
   if(!this.EventId) this.EventId = 1;//初始化计数器
   if(!obj.events[type]) {
    obj.events[type] = [];//创建事件存储器
    if(!obj[‘on‘+type]) obj.events[type][0] = fn;//判断第一次是否已经给别人了!!!!
   }else{
    for(var i in obj.events[type]) {//判断该事件添加的fn是否重复
     if(obj.events[type][i] == fn) {
      return false;
     }
    }
    obj.events[type][this.EventId++] = fn;
   }
   
   obj[‘on‘+type] = function(){
    var e = window.event;
    for(var i in obj.events[type]) {
      obj.events[type][i].call(this,e);//ie获取不到this和e所以通过call来获取对象this 以及事件event
    }
   }
  }
 }

 

removeEvent = function(obj,type,fn) {//删除事件这个在上面的基础上就比较容易点了
  if(typeof obj.removeEventListener != ‘undefined‘) {
   obj.removeEventListener(type,fn,false);
  }else if (typeof obj.detachEvent != ‘undefined‘) {
    for(var i in obj.events[type]) {
    if(obj.events[type][i] == fn) delete obj.events[type][i];
   } 
  }
 }