关于js注册事件的常用方法
2013-04-03 00:00
387 查看
不解释,看代码:
;(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注册事件的常用方法
- 【转】第6篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:自动注册JS脚本+自动反射方法分析
- 关于ajax对象一些常用属性、事件和方法大小写比较常见的问题总结
- js关于时间常用的方法.
- 【转】第7篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:全自动注册与反射方法分析
- 【前端积累】常用事件的js公用方法
- 关于js中的onclick事件和JQuery中的click方法以及on方法事件的详解以及区别
- js中关于array的常用方法
- 原始JS选择器使用方法和常用事件手册
- 浅析js绑定事件的常用方法
- <转载> 关于js常用方法的封装
- 工作日常--总不能一直记流水账吧,温故下js关于数组的一些常用方法
- 关于js动态生成元素,注册(绑定)的事件失效的解决(on)
- 关于js的时间对象常用方法
- js常用方法和事件
- js关于子元素不触发父元素事件的若干方法
- 关于ajax请求后js绑定事件失效问题解决方法
- 关于日期的一些常用方法的封装——dates.js
- JS常用方法(获取Class、获取元素样式、事件监听、cookie、ajax等)
- React Native 原生与JS之间事件绑定注册 作用在于原生可以直接调用JS的方法