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设置IFRAME的SRC值的代码
Nov 30 Javascript
Jquery实现的角色左右选择特效
May 21 Javascript
浅谈JavaScript字符集
May 22 Javascript
Javascript 中创建自定义对象的方法汇总
Dec 04 Javascript
JavaScript获取网页表单action属性的方法
Apr 02 Javascript
JavaScript代码因逗号不规范导致IE不兼容的问题
Feb 25 Javascript
大型JavaScript应用程序架构设计模式
Jun 29 Javascript
js实现自定义路由
Feb 04 Javascript
微信小程序日历组件calendar详解及实例
Jun 08 Javascript
vue中typescript装饰器的使用方法超实用教程
Jun 17 Javascript
微信小程序实现动态列表项的顺序加载动画
Jul 25 Javascript
Vue.js 中制作自定义选择组件的代码附演示demo
Feb 28 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
js 绑定带参数的事件以及手动触发事件
2010/04/27 Javascript
jQuery表格行换色的三种实现方法
2011/06/27 Javascript
jQuery-serialize()输出序列化form表单值的方法
2012/12/26 Javascript
iframe异步加载实现点击左边菜单加载右边内容实例讲解
2013/03/04 Javascript
js实现倒计时(距离结束还有)示例代码
2013/07/24 Javascript
JavaScript中实现无缝滚动、分享到侧边栏实例代码
2016/04/06 Javascript
关于安卓手机微信浏览器中使用XMLHttpRequest 2上传图片显示字节数为0的解决办法
2016/05/17 Javascript
Bootstrap禁用响应式布局的实现方法
2017/03/09 Javascript
Javascript调试之console对象——你不知道的一些小技巧
2017/07/10 Javascript
vue 通过下拉框组件学习vue中的父子通讯
2017/12/19 Javascript
Node中使用ES6语法的基础教程
2018/01/05 Javascript
学习JS中的DOM节点以及操作
2018/04/30 Javascript
[08:44]DOTA2发布会群星聚首 我们都是刀塔人
2014/03/21 DOTA
[01:00]选手抵达华西村 整装待发备战2016国际邀请赛中国区预选赛
2016/06/25 DOTA
Python增量循环删除MySQL表数据的方法
2016/09/23 Python
用Python写王者荣耀刷金币脚本
2017/12/21 Python
Python+matplotlib实现华丽的文本框演示代码
2018/01/22 Python
Python简单实现查找一个字符串中最长不重复子串的方法
2018/03/26 Python
简单实现Python爬取网络图片
2018/04/01 Python
PyQt5实现五子棋游戏(人机对弈)
2020/03/24 Python
python项目对接钉钉SDK的实现
2019/07/15 Python
Flask框架学习笔记之使用Flask实现表单开发详解
2019/08/12 Python
Python连接字符串过程详解
2020/01/06 Python
python入门之基础语法学习笔记
2020/02/08 Python
Python创建简单的神经网络实例讲解
2021/01/04 Python
HTML5自定义mp3播放器源码
2020/01/06 HTML / CSS
倩碧香港官方网站:Clinique香港
2017/11/13 全球购物
MATCHESFASHION澳大利亚/亚太地区:英国时尚奢侈品电商
2020/01/14 全球购物
大学生就业自我鉴定
2013/10/26 职场文书
母亲节感恩活动记录
2014/03/16 职场文书
初三班主任寄语大全
2014/04/04 职场文书
环保宣传标语
2014/06/12 职场文书
白酒代理协议书范本
2014/10/26 职场文书
2015年小学语文教师工作总结
2015/10/23 职场文书
据Python爬虫不靠谱预测可知今年双十一销售额将超过6000亿元
2021/11/11 Python
JavaWeb实现显示mysql数据库数据
2022/03/19 Java/Android