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的trim,ltrim,rtrim自定义函数
Sep 21 Javascript
Javascript delete 引用类型对象
Nov 01 Javascript
JavaScript如何获取数组最大值和最小值
Nov 18 Javascript
jQuery mobile类库使用时加载导航历史的方法简介
Dec 04 Javascript
javascript验证内容为数字以及长度为10的简单实例
Aug 20 Javascript
JavaScript实现点击按钮复制指定区域文本(推荐)
Nov 25 Javascript
js控制按钮,防止频繁点击响应的实例
Feb 15 Javascript
JavaScript实现反转字符串的方法详解
Apr 27 Javascript
Angular6笔记之封装http的示例代码
Jul 27 Javascript
vue 使用高德地图vue-amap组件过程解析
Sep 07 Javascript
vue离开当前页面触发的函数代码
Sep 01 Javascript
vue 公共列表选择组件,引用Vant-UI的样式方式
Nov 02 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
ThinkPHP模板引擎之导入资源文件方法详解
2014/06/18 PHP
Yii视图CGridView列表用法实例分析
2016/07/12 PHP
jquery 指南/入门基础
2007/11/30 Javascript
Javascript中的回调函数和匿名函数的回调示例介绍
2014/05/12 Javascript
JavaScript判断是否为数字的4种方法及效率比较
2015/04/01 Javascript
jQuery基于cookie实现的购物车实例分析
2015/12/24 Javascript
基于JavaScript短信验证码如何实现
2016/01/24 Javascript
JS、jQuery中select的用法详解
2016/04/21 Javascript
jquery mobile界面数据刷新的实现方法
2016/05/28 Javascript
jQuery实现邮箱下拉列表自动补全功能
2016/09/08 Javascript
Java  Spring 事务回滚详解
2016/10/17 Javascript
jQuery Dialog 打开时自动聚焦的解决方法(两种方法)
2016/11/24 Javascript
JS中from 表单序列化提交的代码
2017/01/20 Javascript
nodeJs链接Mysql做增删改查的简单操作
2017/02/04 NodeJs
微信小程序开发图片拖拽实例详解
2017/05/05 Javascript
JavaScript之DOM插入更新删除_动力节点Java学院整理
2017/07/03 Javascript
jQuery 实时保存页面动态添加的数据的示例
2017/08/14 jQuery
vue router 通过路由来实现切换头部标题功能
2019/04/24 Javascript
vue中filters 传入两个参数 / 使用两个filters的实现方法
2019/07/15 Javascript
微信小程序实现上传多个文件 超过10个
2020/03/30 Javascript
python中pass语句用法实例分析
2015/04/30 Python
使用python调用zxing库生成二维码图片详解
2017/01/10 Python
python制作小说爬虫实录
2017/08/14 Python
python里使用正则的findall函数的实例详解
2017/10/19 Python
浅谈关于Python3中venv虚拟环境
2018/08/01 Python
Python实现的读取/更改/写入xml文件操作示例
2018/08/30 Python
在SQLite-Python中实现返回、查询中文字段的方法
2019/07/17 Python
django项目环境搭建及在虚拟机本地创建django项目的教程
2019/08/02 Python
Django 实现图片上传和下载功能
2020/12/31 Python
Python爬虫实现selenium处理iframe作用域问题
2021/01/27 Python
使用CSS3制作响应式导航菜单的方法
2015/07/12 HTML / CSS
白兰氏健康Mall:BRAND’S
2017/11/13 全球购物
2016年中秋节寄语大全
2015/12/07 职场文书
2016年社区中秋节活动总结
2016/04/05 职场文书
idea搭建可运行Servlet的Web项目
2021/06/26 Java/Android
MySQL 计算连续登录天数
2022/05/11 MySQL