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引用指针使用介绍
Nov 07 Javascript
jQuery页面加载初始化常用的三种方法
Jun 04 Javascript
javascript的 {} 语句块详解
Feb 27 Javascript
JQuery用户名校验的具体实现
Mar 18 Javascript
深入理解jquery中的事件与动画
May 24 Javascript
Bootstrap Metronic完全响应式管理模板之菜单栏学习笔记
Jul 08 Javascript
jQuery 更改checkbox的状态,无效的解决方法
Jul 22 Javascript
Highcharts入门之简介
Aug 02 Javascript
Node.js之网络通讯模块实现浅析
Apr 01 Javascript
Vue.js简易安装和快速入门(第二课)
Oct 17 Javascript
JS拖拽排序插件Sortable.js用法实例分析
Feb 20 Javascript
JavaScript 继承 封装 多态实现及原理详解
Jul 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
【COS正片】蕾姆睡衣cos,纯洁可爱被治愈了 cn名濑弥七
2020/03/02 日漫
解决PHP mysql_query执行超时(Fatal error: Maximum execution time …)
2013/07/03 PHP
php实现建立多层级目录的方法
2014/07/19 PHP
PHP中使用substr()截取字符串出现中文乱码问题该怎么办
2015/10/21 PHP
php实现无限级分类查询(递归、非递归)
2016/03/10 PHP
PHP简单读取PDF页数的实现方法
2016/07/21 PHP
一直复略了的一个问题,关于表单重复提交
2007/02/15 Javascript
详解AngularJS中的作用域
2015/06/17 Javascript
jquery实现超简洁的TAB选项卡效果代码
2015/08/28 Javascript
基于Javascript实现弹出页面效果
2016/01/01 Javascript
js实现html table 行,列锁定的简单实例
2016/10/13 Javascript
利用vue.js插入dom节点的方法
2017/03/15 Javascript
详解vue中axios的封装
2018/07/18 Javascript
react native 原生模块桥接的简单说明小结
2019/02/26 Javascript
js实现蒙版效果
2020/01/11 Javascript
Element Alert警告的具体使用方法
2020/07/27 Javascript
element el-table表格的二次封装实现(附表格高度自适应)
2021/01/19 Javascript
Python 提取dict转换为xml/json/table并输出的实现代码
2016/08/28 Python
python分割列表(list)的方法示例
2017/05/07 Python
Python实现嵌套列表及字典并按某一元素去重复功能示例
2017/11/30 Python
python操作openpyxl导出Excel 设置单元格格式及合并处理代码实例
2019/08/27 Python
Python numpy.zero() 初始化矩阵实例
2019/11/27 Python
python实现局域网内实时通信代码
2019/12/22 Python
利用Python脚本实现自动刷网课
2020/02/03 Python
Django 如何使用日期时间选择器规范用户的时间输入示例代码详解
2020/05/22 Python
python中通过pip安装库文件时出现“EnvironmentError: [WinError 5] 拒绝访问”的问题及解决方案
2020/08/11 Python
Django模型验证器介绍与源码分析
2020/09/08 Python
Python 利用argparse模块实现脚本命令行参数解析
2020/12/28 Python
HTML5中meta属性的使用方法
2016/02/29 HTML / CSS
Java如何格式化日期
2012/08/07 面试题
学生发电厂实习自我鉴定
2013/09/22 职场文书
高三自我鉴定怎么写
2013/10/19 职场文书
活动倡议书范文
2014/05/13 职场文书
工伤事故证明
2014/10/20 职场文书
总经理2015中秋节致辞
2015/07/29 职场文书
实操Python爬取觅知网素材图片示例
2021/11/27 Python