这篇文章主要介绍了支持匿名函数的Javascript事件监听封装,需要的朋友可以参考下

关于js中的事件监听大家用的比较多了,无非是判断浏览器是否支持addEventListener和attachEvent,网上搜索关于事件监听的方法也挺多,但是总有些不是很完善。下面的方法中对于添加事件监听的方法是一样的,只不过在取消事件绑定上面做了点手术,现在可以支持匿名函数的使用,所以在绑定事件的时候不再需要给函数单独命名了。


主要代码:


/*绑定事件与取消绑定*/
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['事件名称']是一个数组,来添加多个事件监听的方法,unbind哪个事件的时候遍历handleHash['事件名称']的数组,然后移除。

使用:


bind(obj,'click',function(){
 alert ('click');
});
unbind(obj,'click');

最新资讯
累计融资超20亿美元 理想汽车吹响市值千亿美元冲锋号?

累计融资超20亿美元

继蔚来之后,理想汽车有望成为第二家登陆资本市场的造车
美团5亿美元加持理想汽车:成第二大股东 持股14.5%

美团5亿美元加持理想

理想汽车昨日向SEC递交招股书,股票代码为“LI”,准备冲
北京SKP:餐品会送至指定位置 外卖员由员工通道进入

北京SKP:餐品会送至指

针对日前博主爆料”北京SKP不允许外卖员进入“一事,今
王兴急着变现,李想心急求钱

王兴急着变现,李想心急

李想,曾经的汽车之家创始人,现在的理想汽车(原“车和家”
SpaceX再次推迟星链和BlackSky卫星发射

SpaceX再次推迟星链和

当地时间7月11日,SpaceX再次推迟了最新的星链卫星发射,
史玉柱难退休,巨人网络不服老

史玉柱难退休,巨人网络

目前巨人网络内生游戏主业的创新仍未取得太多成绩,加上
最新文章
Vue实现图片与文字混输效果

Vue实现图片与文字混

用多了 JQuery ,习惯了使用JQuery的API操作 DOM ,几乎忘
Vue实现点击当前元素以外的地方隐藏当前元素(实现思路)

Vue实现点击当前元素

这篇文章主要介绍了Vue实现点击当前元素以外的地方隐
Vue实现验证码功能

Vue实现验证码功能

这篇文章主要为大家详细介绍了Vue实现验证码功能,文中
JS实现的雪花飘落特效示例

JS实现的雪花飘落特效

这篇文章主要介绍了JS实现的雪花飘落特效,结合实例形
微信小程序实现图片压缩

微信小程序实现图片压

这篇文章主要为大家详细介绍了微信小程序实现图片压缩
JavaScript实现京东放大镜效果

JavaScript实现京东放

这篇文章主要为大家详细介绍了JavaScript实现京东放大