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通用函数
May 09 Javascript
jquery动态增加text元素以及删除文本内容实例代码
Jul 01 Javascript
Jquery解析json数据详解
Dec 26 Javascript
js中arguments,caller,callee,apply的用法小结
Jan 28 Javascript
js对文章内容进行分页示例代码
Mar 05 Javascript
js实现从数组里随机获取元素
Jan 12 Javascript
使用jQuery处理AJAX请求的基础学习教程
May 10 Javascript
JavaScript实现解析INI文件内容的方法
Nov 17 Javascript
js通过classname来获取元素的方法
Nov 24 Javascript
微信小程序商城项目之购物数量加减(3)
Apr 17 Javascript
微信小程序 支付功能实现PHP实例详解
May 12 Javascript
JS实现简易的图片拖拽排序实例代码
Jun 09 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利用header函数实现文件下载时直接提示保存
2009/11/12 PHP
php access 数据连接与读取保存编辑数据的实现代码
2010/05/12 PHP
php过滤XSS攻击的函数
2013/11/12 PHP
php格式化时间戳显示友好的时间实现思路及代码
2014/10/23 PHP
php隐藏IP地址后两位显示为星号的方法
2014/11/21 PHP
详解 PHP加密解密字符串函数附源码下载
2015/12/18 PHP
PHP使用SOAP扩展实现WebService的方法
2016/04/01 PHP
PHP实现获取并生成数据库字典的方法
2016/05/04 PHP
php通过PHPExcel导入Excel表格到MySQL数据库的简单实例
2016/10/29 PHP
PHP通过curl获取接口URL的数据方法
2018/05/31 PHP
基于Jquery的淡入淡出的特效基础练习
2010/12/13 Javascript
$.get获取一个文件的内容示例代码
2013/09/11 Javascript
Jquery结合HTML5实现文件上传
2015/06/25 Javascript
详解JavaScript UTC时间转换方法
2016/01/07 Javascript
微信小程序tabbar不显示解决办法
2017/06/08 Javascript
Vue-router结合transition实现app前进后退动画切换效果的实例
2017/10/11 Javascript
Angular 封装并发布组件的方法示例
2018/04/19 Javascript
npm 语义版本控制详解
2019/09/10 Javascript
js中位数不足自动补位扩展padLeft、padRight实现代码
2020/04/06 Javascript
[46:44]VG vs TNC Supermajor小组赛B组败者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
Python实现树的先序、中序、后序排序算法示例
2017/06/23 Python
Python随机数函数代码实例解析
2020/02/09 Python
使用Python文件读写,自定义分隔符(custom delimiter)
2020/07/05 Python
埃弗顿足球俱乐部官方网上商店:Everton Direct
2018/01/13 全球购物
毕业生求职简历的自我评价
2013/10/07 职场文书
酒吧副总经理岗位职责
2013/12/10 职场文书
应届本科生推荐信范文
2013/12/25 职场文书
中学教师请假制度
2014/02/03 职场文书
硕士毕业论文导师评语
2014/12/31 职场文书
花木兰观后感
2015/06/10 职场文书
于丹论语心得观后感
2015/06/15 职场文书
初三数学教学反思
2016/02/17 职场文书
vue使用Google Recaptcha验证的实现示例
2021/08/23 Vue.js
Redis的字符串是如何实现的
2021/10/24 Redis
一文弄懂MySQL中redo log与binlog的区别
2022/02/15 MySQL
《吸血鬼:避世 血猎》官宣4.27发售 系列首款大逃杀
2022/04/03 其他游戏