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 相关文章推荐
基于jquery.Jcrop的头像编辑器
Mar 01 Javascript
JavaScript 对象的属性和方法4种不同的类型
Mar 19 Javascript
js 强制弹出窗口代码研究-又一款代码
Mar 20 Javascript
JavaScript 弹出窗体点击按钮返回选择数据的实现
Apr 01 Javascript
JQuery获取当前屏幕的高度宽度的实现代码
Jul 12 Javascript
学习从实践开始之jQuery插件开发 菜单插件开发
May 03 Javascript
javascript动画浅析
Aug 30 Javascript
jQuery+jsp实现省市县三级联动效果(附源码)
Dec 03 Javascript
精彩的Bootstrap案例分享 重点在注释!(选项卡、栅格布局)
Jul 01 Javascript
浅谈jQuery效果函数
Sep 16 Javascript
详解Vue 全局引入bass.scss 处理方案
Mar 26 Javascript
vue实现图片裁剪后上传
Dec 16 Vue.js
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
怎么样可以把 phpinfo()屏蔽掉?
2006/11/24 PHP
谨慎使用PHP的引用原因分析
2012/09/06 PHP
php旋转图片90度的方法
2013/11/07 PHP
PHP实现通过中文字符比率来判断垃圾评论的方法
2014/10/20 PHP
PHP中overload与override的区别
2017/02/13 PHP
php中的explode()函数实例介绍
2019/01/18 PHP
javascript 模拟JQuery的Ready方法实现并出现的问题
2009/12/06 Javascript
jquery 常用操作方法
2010/01/28 Javascript
精心挑选的15款优秀jQuery 本特效插件和教程
2012/08/06 Javascript
常用一些Javascript判断函数
2012/08/14 Javascript
js获取和设置属性的方法
2014/02/20 Javascript
JS获取及设置TextArea或input文本框选择文本位置的方法
2015/03/24 Javascript
深入浅出ES6新特性之函数默认参数和箭头函数
2016/08/01 Javascript
Angularjs 自定义服务的三种方式(推荐)
2016/08/02 Javascript
Javascript 实现全屏滚动实例代码
2016/12/31 Javascript
js oncontextmenu事件使用详解
2017/03/25 Javascript
深入理解vue.js中$watch的oldvalue与newValue
2017/08/07 Javascript
ReactNative 之FlatList使用及踩坑封装总结
2017/11/29 Javascript
微信小程序结合mock.js实现后台模拟及调试
2019/03/28 Javascript
vue中@change兼容问题详解
2019/10/25 Javascript
微信小程序实现滑动操作代码
2020/04/23 Javascript
详解Python之数据序列化(json、pickle、shelve)
2017/03/30 Python
python中类和实例如何绑定属性与方法示例详解
2017/08/18 Python
Python 闭包的使用方法
2017/09/07 Python
python之从文件读取数据到list的实例讲解
2018/04/19 Python
python3+PyQt5泛型委托详解
2018/04/24 Python
python实现中文文本分句的例子
2019/07/15 Python
python实现代码审查自动回复消息
2021/02/01 Python
Python中使用Selenium环境安装的方法步骤
2021/02/22 Python
HTML5 Canvas像素处理使用接口介绍
2012/12/02 HTML / CSS
HTML5拖拽文件到浏览器并实现文件上传下载功能代码
2013/06/06 HTML / CSS
草莓网英国官网:Strawberrynet UK
2017/02/12 全球购物
比较基础的php面试题及答案-编程题
2012/10/14 面试题
桥梁与隧道工程专业本科生求职信
2013/10/08 职场文书
2015医德医风个人工作总结
2015/04/02 职场文书
如何用Laravel包含你自己的帮助函数
2021/05/27 PHP