关于js注册事件的常用方法_javascript技巧
程序员文章站
2022-03-21 18:14:21
...
不解释,看代码:
;(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;
}
};
})();
复制代码 代码如下:
;(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;
}
};
})();
上一篇: HTML5的深入了解
下一篇: 使用TP框架仿sql攻击注入
推荐阅读
-
js实现点击注册按钮开始读秒倒计时的小例子_javascript技巧
-
关于页面嵌入swf覆盖div层的问题的解决方法_javascript技巧
-
JS截取字符串常用方法整理及使用示例_javascript技巧
-
JS链式调用的实现方法_javascript技巧
-
js中设置元素class的三种方法小结_javascript技巧
-
常见的原始JS选择器使用方法总结_javascript技巧
-
js控制容器隐藏出现防止样式变化的两种方法_javascript技巧
-
js实现每日自动换一张图片的方法_javascript技巧
-
让低版本浏览器支持input的placeholder属性(js方法)_javascript技巧
-
JS的replace方法与正则表达式结合应用讲解_javascript技巧