关于js注册事件的常用方法
2013-04-03 15:44
585 查看
不解释,看代码:
复制代码 代码如下:;(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;
}
};
})();
您可能感兴趣的文章:
相关文章推荐
- 关于js注册事件的常用方法
- JS常用事件兼容性处理方法
- JS和HTML分离:注册事件的方法进行封装
- 关于js注册事件的疑问
- JS 之document常用方法属性事件
- 关于datagrid中控件利用js调用后台方法事件的问题
- JS实现循环给元素绑定事件的几个常用方法
- Js常用的注册验证方法
- js小笔记 事件常用方法
- 关于js中的onclick事件和JQuery中的click方法
- window对象常用的方法、注册事件的方式、常用的事件、地址栏对象、Screen(屏幕)对象
- 关于js动态生成元素,注册(绑定)的事件失效的解决(on)
- HTML中关于动态创建的标签无法绑定js事件的解决方法
- JS注册事件 JS:attachEvent和addEventListener 使用方法
- 用js原生方法封装跨浏览器注册事件的方法系列一(事件入门)
- 【转】第5篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:自动注册JS脚本+委托回调方法分析
- Js常用的注册验证方法
- JS注册事件 JS:attachEvent和addEventListener 使用方法
- JS注册事件 JS:attachEvent和addEventListener 使用方法
- 关于vs.net 2003向vs.net 2005迁移后,注册事件丢失,"并不包含...的定义" 的解决方法