关于js注册事件的常用方法_Javascript教程-查字典教程网
关于js注册事件的常用方法
关于js注册事件的常用方法
发布时间:2016-12-30 来源:查字典编辑
摘要:不解释,看代码:复制代码代码如下:;(function(){//进行库封装,防止对象污染window['cm']={};/***给对象注册事...

不解释,看代码:

复制代码 代码如下:

;(function(){

//进行库封装,防止对象污染

window['cm']={};

/**

*给对象注册事件

*/

var addListener=function(element,type,fn){

if(typeof element == 'undefined') return false;

if(element.addEventListener){

element.addEventListener(type,fn,false);

}else if(element.attachEvent){

//将事件缓冲到该标签上,已解决this指向window(现fn内this指向element)和移除匿名事件问题

var _EventRef='_'+type+'EventRef';

if(!element[_EventRef]){

element[_EventRef]=[];

}

var _EventRefs=element[_EventRef];

var index;

for(index in _EventRefs){

if(_EventRefs[index]['realFn']==fn){

return;

}

}

var nestFn=function(){

fn.apply(element,arguments);

};

element[_EventRef].push({'realFn':fn,'nestFn':nestFn});

element.attachEvent('on'+type,nestFn);

}else{

element['on'+type]=fn;

}

};

window['cm']['addListener']=addListener;

/**

*移除对象上已注册事件

*/

var removeListener=function(element,type,fn){

if(typeof element == 'undefined') return false;

if(element.removeEventListener){

element.removeEventListener(type,fn,false);

}else if(element.detachEvent){

var _EventRef='_'+type+'EventRef';

if(!element[_EventRef]){

element[_EventRef]=[];

}

var _EventRefs=element[_EventRef]

var index;

var nestFn;

for(index in _EventRefs){

if(_EventRefs[index]['realFn']==fn){

nestFn=_EventRefs[index]['nestFn'];

if(index==_EventRefs.length-1){

element[_EventRef]=_EventRefs.slice(0,index);

}else{

element[_EventRef]=_EventRefs.slice(0,index).concat(_EventRefs.slice(index+1,_EventRefs.length-1));

}

break;

}

}

if(nestFn){

element.detachEvent('on'+type,nestFn);

}

}else{

element['on'+type]=null;

}

};

})();

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新Javascript教程学习
    热门Javascript教程学习
    编程开发子分类