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 事件查询综合
Jul 13 Javascript
后台获取ZTREE选中节点的方法
Feb 12 Javascript
使用js复制链接中的部分文字的方法
Jul 30 Javascript
使用jQuery处理AJAX请求的基础学习教程
May 10 Javascript
利用jquery给指定的table动态添加一行、删除一行的方法
Oct 12 Javascript
bootstrap datetimepicker实现秒钟选择下拉框
Jan 05 Javascript
JS优化与惰性载入函数实例分析
Apr 06 Javascript
详解vue slot插槽的使用方法
Jun 13 Javascript
基于vue cli 通过命令行传参实现多环境配置
Jul 12 Javascript
深入理解Puppeteer的入门教程和实践
Mar 05 Javascript
JavaScript队列结构Queue实现过程解析
Mar 07 Javascript
用VsCode编辑TypeScript的实现方法
May 07 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
Laravel学习教程之request validation的编写
2017/10/25 PHP
为超链接加上disabled后的故事
2010/12/10 Javascript
基于Jquery的仿照flash放大图片效果代码
2011/03/16 Javascript
jquery移除、绑定、触发元素事件使用示例详解
2014/04/10 Javascript
AngularJS学习笔记之TodoMVC的分析
2015/02/22 Javascript
基于jQuery实现仿QQ空间送礼物功能代码
2016/05/24 Javascript
JS不用正则验证输入的字符串是否为空(包含空格)的实现代码
2016/06/14 Javascript
JavaScript的继承实现小结
2017/05/07 Javascript
JS实现简单拖拽效果
2017/06/21 Javascript
js学习总结_基于数据类型检测的四种方式(必看)
2017/07/04 Javascript
JS排序算法之希尔排序与快速排序实现方法
2017/12/12 Javascript
vue3.0 CLI - 2.1 -  component 组件入门教程
2018/09/14 Javascript
微信小程序实现发送模板消息功能示例【通过openid推送消息给用户】
2019/05/05 Javascript
jquery实现二级导航下拉菜单效果实例
2019/05/14 jQuery
微信小程序实现打开并下载服务器上面的pdf文件到手机
2019/09/20 Javascript
nodejs实现UDP组播示例方法
2019/11/04 NodeJs
JQuery复选框全选效果如何实现
2020/05/08 jQuery
vue项目在线上服务器访问失败原因分析
2020/08/14 Javascript
详解JavaScript中的链式调用
2020/11/27 Javascript
Python的Django框架中settings文件的部署建议
2015/05/30 Python
python判断字符串编码的简单实现方法(使用chardet)
2016/07/01 Python
python自动裁剪图像代码分享
2017/11/25 Python
Python numpy 提取矩阵的某一行或某一列的实例
2018/04/03 Python
浅述python中深浅拷贝原理
2018/09/18 Python
Scrapy框架爬取Boss直聘网Python职位信息的源码
2019/02/22 Python
pycharm远程连接vagrant虚拟机中mariadb数据库
2020/06/05 Python
python爬虫要用到的库总结
2020/07/28 Python
土耳其国际性时尚购物网站:Modanisa
2018/01/19 全球购物
Lampegiganten丹麦:欧洲领先的照明网上商店
2018/04/25 全球购物
Perfume’s Club德国官网:在线购买香水
2019/04/08 全球购物
英国网上电器商店:Electricshop
2020/03/15 全球购物
个人充满哲理的自我评价
2014/02/20 职场文书
机关搬迁方案
2014/05/18 职场文书
2014小学数学教师个人工作总结
2014/12/18 职场文书
Python中的matplotlib绘制百分比堆叠柱状图,并为每一个类别设置不同的填充图案
2022/04/20 Python
人工智能深度学习OpenAI baselines的使用方法
2022/05/20 Python