window.addeventjs事件驱动函数集合addEvent等


Posted in Javascript onFebruary 19, 2008

// written by Dean Edwards, 2005
// with input from Tino Zijdel, Matthias Miller, Diego Perini

// http://dean.edwards.name/weblog/2005/10/add-event/

function addEvent(element, type, handler) {
  if (element.addEventListener) {
    element.addEventListener(type, handler, false);
  } else {
    // assign each event handler a unique ID
    if (!handler.$$guid) handler.$$guid = addEvent.guid++;
    // create a hash table of event types for the element
    if (!element.events) element.events = {};
    // create a hash table of event handlers for each element/event pair
    var handlers = element.events[type];
    if (!handlers) {
      handlers = element.events[type] = {};
      // store the existing event handler (if there is one)
      if (element["on" + type]) {
        handlers[0] = element["on" + type];
      }
    }
    // store the event handler in the hash table
    handlers[handler.$$guid] = handler;
    // assign a global event handler to do all the work
    element["on" + type] = handleEvent;
  }
};
// a counter used to create unique IDs
addEvent.guid = 1;

function removeEvent(element, type, handler) {
  if (element.removeEventListener) {
    element.removeEventListener(type, handler, false);
  } else {
    // delete the event handler from the hash table
    if (element.events && element.events[type]) {
      delete element.events[type][handler.$$guid];
    }
  }
};

function handleEvent(event) {
  var returnValue = true;
  // grab the event object (IE uses a global event object)
  event = event || fixEvent(((this.ownerDocument || this.document || this).parentWindow || window).event);
  // get a reference to the hash table of event handlers
  var handlers = this.events[event.type];
  // execute each event handler
  for (var i in handlers) {
    this.$$handleEvent = handlers[i];
    if (this.$$handleEvent(event) === false) {
      returnValue = false;
    }
  }
  return returnValue;
};

function fixEvent(event) {
  // add W3C standard event methods
  event.preventDefault = fixEvent.preventDefault;
  event.stopPropagation = fixEvent.stopPropagation;
  return event;
};
fixEvent.preventDefault = function() {
  this.returnValue = false;
};
fixEvent.stopPropagation = function() {
  this.cancelBubble = true;
};

Javascript 相关文章推荐
js精度溢出解决方案
Dec 02 Javascript
JQuery对id中含有特殊字符的转义处理示例
Sep 06 Javascript
关于javascript event flow 的一个bug详解
Sep 17 Javascript
js(JavaScript)实现TAB标签切换效果的简单实例
Feb 26 Javascript
用window.onerror捕获并上报Js错误的方法
Jan 27 Javascript
js正则表达式replace替换变量方法
May 21 Javascript
详解Node.js模块间共享数据库连接的方法
May 24 Javascript
jQuery 检查某个元素在页面上是否存在实例代码
Oct 27 Javascript
微信小程序 支付功能(前端)的实现
May 24 Javascript
ES6使用export和import实现模块化的方法
Sep 10 Javascript
JS回调函数深入理解
Oct 16 Javascript
Webpack5正式发布,有哪些新特性
Oct 12 Javascript
setAttribute 与 class冲突解决
Feb 17 #Javascript
setInterval 和 setTimeout会产生内存溢出
Feb 15 #Javascript
一个js封装的不错的选项卡效果代码
Feb 15 #Javascript
ImageFlow可鼠标控制图片滚动
Jan 30 #Javascript
北京奥运官方网站幻灯切换效果flash版打包下载
Jan 30 #Javascript
Javascript优化技巧(文件瘦身篇)
Jan 28 #Javascript
用dom+xhtml+css制作的一个相册效果代码打包下载
Jan 24 #Javascript
You might like
一个php作的文本留言本的例子(六)
2006/10/09 PHP
php获取本周开始日期和结束日期的方法
2015/03/09 PHP
PHP SPL标准库中的常用函数介绍
2015/05/11 PHP
PHP-FPM之Chroot执行环境详解
2015/08/03 PHP
iOS+PHP注册登录系统 PHP部分(上)
2016/12/26 PHP
MacOS下PHP7.1升级到PHP7.4.15的方法
2021/02/22 PHP
jquery last-child 列表最后一项的样式
2010/01/22 Javascript
学习javascript,实现插入排序实现代码
2011/07/31 Javascript
connect中间件session、cookie的使用方法分享
2014/06/17 Javascript
nodejs之请求路由概述
2014/07/05 NodeJs
jquery插件jquery.confirm弹出确认消息
2015/12/22 Javascript
Bootstrap选项卡与Masonry插件的完美结合
2016/07/06 Javascript
JS声明式函数与赋值式函数实例分析
2016/12/13 Javascript
Vue.js系列之项目搭建(1)
2017/01/03 Javascript
JS运动改变单物体透明度的方法分析
2018/01/23 Javascript
jquery操作select常见方法大全【7种情况】
2019/05/28 jQuery
Node.js学习之内置模块fs用法示例
2020/01/22 Javascript
定制FileField中的上传文件名称实例
2017/08/23 Python
Zookeeper接口kazoo实例解析
2018/01/22 Python
Redis使用watch完成秒杀抢购功能的代码
2018/05/07 Python
python requests 库请求带有文件参数的接口实例
2019/01/03 Python
Python代码使用 Pyftpdlib实现FTP服务器功能
2019/07/22 Python
Python模块的定义,模块的导入,__name__用法实例分析
2020/01/07 Python
Python 3.8 新功能大揭秘【新手必学】
2020/02/05 Python
python输出结果刷新及进度条的实现操作
2020/07/13 Python
jupyter 添加不同内核的操作
2021/02/06 Python
CSS3 实现footer 固定在底部(无论页面多高始终在底部)
2019/10/15 HTML / CSS
基于HTML5+CSS3实现简单的时钟效果
2017/09/11 HTML / CSS
英国时尚服饰电商:Boohoo
2017/10/12 全球购物
自主招生自荐书
2013/11/29 职场文书
创业者迈进成功第一步:如何写创业计划书?
2014/03/22 职场文书
优秀教师个人总结
2015/02/11 职场文书
少先队大队委竞选口号
2015/12/25 职场文书
《辉夜大小姐想让我告白》第三季正式预告
2022/03/20 日漫
vue项目打包后路由错误的解决方法
2022/04/13 Vue.js
Nginx限流和黑名单配置
2022/05/20 Servers