關(guān)于js注冊事件的常用方法
更新時間:2013年04月03日 15:44:55 作者:
為了兼容各種瀏覽器,今天沒事特意復(fù)習(xí)了一下js原生事件特性,對其封裝一下。
不解釋,看代碼:
復(fù)制代碼 代碼如下:
;(function(){
//進(jìn)行庫封裝,防止對象污染
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){
//將事件緩沖到該標(biāo)簽上,已解決this指向window(現(xiàn)fn內(nèi)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;
}
};
})();
相關(guān)文章
JavaScript中在光標(biāo)處插入添加文本標(biāo)簽節(jié)點的詳細(xì)方法
本文主要介紹了JavaScript中在光標(biāo)處插入添加文本標(biāo)簽節(jié)點的詳細(xì)方法。具有很好的參考價值。下面跟著小編一起來看下吧2017-03-03
layui點擊左側(cè)導(dǎo)航欄,實現(xiàn)不刷新整個頁面,只刷新局部的方法
今天小編就為大家分享一篇layui點擊左側(cè)導(dǎo)航欄,實現(xiàn)不刷新整個頁面,只刷新局部的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09
javascript函數(shù)定義的幾種區(qū)別小結(jié)
本篇文章主要是對javascript函數(shù)定義的幾種區(qū)別進(jìn)行了詳細(xì)的總結(jié)介紹,需要的朋友可以過來參考下,希望對大家有所幫助2014-01-01
使用JS中的exec()方法構(gòu)造正則表達(dá)式驗證
這篇文章主要介紹了使用JS中的exec()方法構(gòu)造正則表達(dá)式驗證的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-08-08
淺談js多維數(shù)組和hash數(shù)組定義和使用
下面小編就為大家?guī)硪黄獪\談js多維數(shù)組和hash數(shù)組定義和使用。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-07-07

