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 相关文章推荐
JavaScript 模仿vbs中的 DateAdd() 函数的代码
Aug 13 Javascript
javascript 密码强度验证规则、打分、验证(给出前端代码,后端代码可根据强度规则翻译)
May 18 Javascript
基于jquery的合并table相同单元格的插件(精简版)
Apr 05 Javascript
jquery遍历数组与筛选数组的方法
Nov 05 Javascript
javascript实现网站加入收藏功能
Dec 16 Javascript
JS实现n秒后自动跳转的两种方法
Nov 30 Javascript
Jquery表单验证失败后不提交的解决方法
Oct 18 Javascript
bootstrap提示标签、提示框实现代码
Dec 28 Javascript
VUE解决 v-html不能触发点击事件的问题
Oct 28 Javascript
通过angular CDK实现页面元素拖放的步骤详解
Jul 01 Javascript
vue实现导航菜单和编辑文本的示例代码
Jul 04 Javascript
原生js实现表格翻页和跳转
Sep 29 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自动给文章加关键词链接的函数代码
2012/11/29 PHP
codeigniter自带数据库类使用方法说明
2014/03/25 PHP
Discuz!X中SESSION机制实例详解
2015/09/23 PHP
PHP实现微信申请退款功能
2018/10/01 PHP
Javascript注入技巧
2007/06/22 Javascript
使用jQuery解决IE与FireFox下createElement方法的差异
2013/11/14 Javascript
更快的异步执行(setTimeout多浏览器)
2014/08/12 Javascript
JavaScript 变量、作用域及内存
2015/04/08 Javascript
Jquery Ajax Error 调试错误的技巧
2015/11/20 Javascript
AngularJS基于ngInfiniteScroll实现下拉滚动加载的方法
2016/12/14 Javascript
详解网站中图片日常使用以及优化手法
2017/01/09 Javascript
完美解决spring websocket自动断开连接再创建引发的问题
2017/03/02 Javascript
nodejs中模块定义实例详解
2017/03/18 NodeJs
微信小程序中post方法与get方法的封装
2017/09/26 Javascript
Angular实现表单验证功能
2017/11/13 Javascript
JavaScript面向对象编程小游戏---贪吃蛇代码实例
2019/05/15 Javascript
浅谈TypeScript 用 Webpack/ts-node 运行的配置记录
2019/10/11 Javascript
使用PreloadJS加载图片资源的基础方法详解
2020/02/03 Javascript
JavaScript中条件语句的优化技巧总结
2020/12/04 Javascript
[03:40]DOTA2英雄梦之声_第01期_炼金术士
2014/06/23 DOTA
linux系统使用python获取内存使用信息脚本分享
2014/01/15 Python
使用Python实现在Windows下安装Django
2018/10/17 Python
Python判断有效的数独算法示例
2019/02/23 Python
django 基于中间件实现限制ip频繁访问过程详解
2019/07/30 Python
python实现的config文件读写功能示例
2019/09/24 Python
Html5内唤醒百度、高德APP的实现示例
2019/05/20 HTML / CSS
详解HTML5中CSS外观属性
2020/09/10 HTML / CSS
财务分析个人的自荐书范文
2013/11/24 职场文书
财务方面个人工作的自我评价
2013/12/28 职场文书
企业三严三实学习心得体会
2014/10/13 职场文书
2014年信用社工作总结
2014/11/25 职场文书
应届生求职自荐信范文
2015/03/04 职场文书
2015年公司保安年终工作总结
2015/05/14 职场文书
2016年劳模先进事迹材料
2016/02/25 职场文书
Mysql存储过程、触发器、事件调度器使用入门指南
2022/01/22 MySQL
SSM项目使用拦截器实现登录验证功能
2022/01/22 Java/Android