这篇文章主要介绍了支持匿名函数的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');

最新资讯
腾讯:WeCom是企业微信海外版 和WeChat是不同产品

腾讯:WeCom是企业微信

腾讯方面对在美运营WeCom产品向新浪科技回应表示,WeCom
令人困惑的阿里“新制造”

令人困惑的阿里“新制

阿里发布了开发三年的新制造项目犀牛智造,但它究竟是什
这个由女性数学家创建的理论,重塑了物理学今天的面貌

这个由女性数学家创建

在女性被认为智力不如男性的时代,诺特赢得了男同事的钦
喝咖啡能减少癌症死亡?研究发现,咖啡与结肠癌患者生存期改善有关

喝咖啡能减少癌症死亡

研究结果显示,在晚期或转移性结直肠癌患者中,咖啡饮用量
你睡得好吗?新研究发现,长期睡眠不佳,埋下阿尔茨海默病的隐患

你睡得好吗?新研究发现

越来越多的科学研究证明,睡眠不足给身心健康都会带来深
感觉到冷别硬抗,小心骨骼受损!

感觉到冷别硬抗,小心骨

通过流行病学分析、实验以及先进的宏基因组和代谢组学
最新文章
详解Vue的ref特性的使用

详解Vue的ref特性的使

这篇文章主要介绍了详解Vue的ref特性的使用,文中通过
vue学习笔记之slot插槽基本用法实例分析

vue学习笔记之slot插

这篇文章主要介绍了vue学习笔记之slot插槽基本用法,结
vue跳转方式(打开新页面)及传参操作示例

vue跳转方式(打开新页

这篇文章主要介绍了vue跳转方式(打开新页面)及传参操作,
vue学习笔记之过滤器的基本使用方法实例分析

vue学习笔记之过滤器

这篇文章主要介绍了vue学习笔记之过滤器的基本使用方
js获取本日、本周、本月的时间代码

js获取本日、本周、本

本篇文章给大家分享的内容是利用js如何获取本日、本周
node crawler如何添加promise支持

node crawler如何添加

这篇文章主要介绍了node crawler如何添加promise支持,