打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
js常用方法之事件注册

为了兼容各种浏览器,今天没事特意复习了一下js原生事件特性,对其封装一下,不解释,看代码:

;(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;        }    };})();

 

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
js实现input文本框点击时文字消失,失去焦点时文字出现
前端开发面试题之JavaScript
jQuery中的编程范式
启动和JQuery绑定--AngularJS学习笔记(二)
输入框光标点击内不显示提示文字,划出显示提示文字
javascript---浅析注册事件. - 前端技术
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服