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

