封裝了一個(gè)支持匿名函數(shù)的Javascript事件監(jiān)聽器
關(guān)于js中的事件監(jiān)聽大家用的比較多了,無非是判斷瀏覽器是否支持addEventListener和attachEvent,網(wǎng)上搜索關(guān)于事件監(jiān)聽的方法也挺多,但是總有些不是很完善。下面的方法中對(duì)于添加事件監(jiān)聽的方法是一樣的,只不過在取消事件綁定上面做了點(diǎn)手術(shù),現(xiàn)在可以支持匿名函數(shù)的使用,所以在綁定事件的時(shí)候不再需要給函數(shù)單獨(dú)命名了。
主要代碼:
/*綁定事件與取消綁定*/
var handleHash = {};
var bind = (function() {
if (window.addEventListener) {
return function(el, type, fn, capture) {
el.addEventListener(type, function(){
fn();
handleHash[type] = handleHash[type] || [];
handleHash[type].push(arguments.callee);
}, capture);
};
} else if (window.attachEvent) {
return function(el, type, fn, capture) {
el.attachEvent("on" + type, function(){
fn();
handleHash[type] = handleHash[type] || [];
handleHash[type].push(arguments.callee);
});
};
}
})();
var unbind = (function(){
if (window.addEventListener) {
return function(el, type ) {
if(handleHash[type]){
var i = 0, len = handleHash[type].length;
for (i; i<len ; i += 1){
el.removeEventListener(type, handleHash[type][i]);
}
};
};
} else if (window.attachEvent) {
return function(el, type) {
if(handleHash[type]){
var i = 0, len = handleHash[type].length;
for (i; i<len ; i += 1){
el.detachEvent("on" + type, handleHash[type][i]);
}
};
};
}
})();
原理解析:
handleHash做哈希表緩存事件的function,handleHash['事件名稱']是一個(gè)數(shù)組,來添加多個(gè)事件監(jiān)聽的方法,unbind哪個(gè)事件的時(shí)候遍歷handleHash['事件名稱']的數(shù)組,然后移除。
使用:
bind(obj,'click',function(){
alert ('click');
});
unbind(obj,'click');
相關(guān)文章
微信小程序中使用ECharts 異步加載數(shù)據(jù)的方法
這篇文章主要介紹了微信小程序中使用ECharts 異步加載數(shù)據(jù)的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-06-06js string 轉(zhuǎn) int 注意的問題小結(jié)
Javascript將string類型轉(zhuǎn)換int類型的過程中總會(huì)出現(xiàn)不如意的問題,下面為大家介紹下js string轉(zhuǎn)int的一些注意的問題,感興趣的朋友可以參考下2013-08-08JS實(shí)現(xiàn)下拉框的動(dòng)態(tài)添加(附效果)
頁面初加載時(shí):選擇車類型后:選擇車顏色后:JS實(shí)現(xiàn)下拉框的動(dòng)態(tài)添加,網(wǎng)頁代碼如下:動(dòng)態(tài)添加下拉框 車類型:請(qǐng)選擇寶馬、奔馳 車顏色2013-04-04javascript 獲取url參數(shù)和script標(biāo)簽中獲取url參數(shù)函數(shù)代碼
不要在方法中調(diào)用方法,否則可能始終獲取的是最后一個(gè)js的文件的參數(shù),要在方法中使用,請(qǐng)先用變量保存,在方法中直接獲取2010-01-01JS記錄用戶登錄次數(shù)實(shí)現(xiàn)代碼
當(dāng)?shù)卿洿螖?shù)達(dá)到三次,就自動(dòng)調(diào)用函數(shù),隱藏彈出框。下面是具體的實(shí)現(xiàn),感興趣的朋友可以參考下2014-01-01