JS事件添加和移出的兼容写法示例


Posted in Javascript onJune 20, 2016

本文实例讲述了JS事件添加和移出的兼容写法。分享给大家供大家参考,具体如下:

var EventUtil = {
  addHandler : function (element , type, handler {
     if ( element.addEventListener){
        element.addEventListener(type, handler, false);
      }else if ( element.attachEvent) {
        element.attachEvent("on"+type,handler);
      }else {
         element["on" + type] = handler;
      }
    },
  getEvent : function (event){
      return event ? event : window.event;
     },
   preventDefault : function(event){
      if(event.preventDefault){
         event.preventDefault();
      }else{
         event.returnValue = false;
      }
   },
  removeHandsler : function (element , type , handler){
     if(element.removeEventListener){
         element.removeEventListener(type , handler , false);
     }else if(element.detachEvent){
         element.detachEvent("on" + type , handler);
     }else{
         element["on" + type] = handler;
     }
    }
   stopPropagation : function(event){
      if(event.stopPropagation){
         event.stopPropagation();
      }else {
          event.cancelBubble = true;
      }
    },
   getRelatedTarget : function(event){
      if(event.relatedTarget){
          return event.relatedTarget;
      }else if (event.toElement){
          return event.toElement;
      }else if(event.fromElement){
          return event.fromElement;
      }esle {
          return null;
       }
    },
    getButton : function (event){
       if(document.implementation.hasFeature("MouseEvents" , "2.0")){
          return event.button;
       }else{
           switch(event.button){
             case 0:
             case 1:
             case 3:
             case 5:
             case 7:
               return 0;
             case 2:
             case 6:
               return 2;
             case 4:
               return 1;
            }
        }
     }
} ;

其中,addHandler 和 removeHandsler 个方法首先都会检测传入的元素中是否存在DOM2级方法.如果存在DOM2级方法,则使用该方法:传入事件类型,事件处理程序函数和第三个参数fasle(表示冒泡阶段). 如果存在的是IE的方法,则采取第二种方案.注意此时的事件类型必须加上"on"前缀.最后一种可能就是使用DOM0级方法(在现代浏览器中,应该不会执行这里的代码). 此时,我们使用的是方括号语法来将属性名指定为事件处理程序,或者将属性设置为null.

可以像下面这样使用EventUtil对象:

var btn = document.getElementById("myBtn");
var handler = function(){
  alert("Clicked");
};
EventUtil.addHandler(btn , "click", handler);
//略去其他代码
EventUtil.removeHandler(btn, "click", handler);

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
JQuery 学习笔记 选择器之三
Jul 23 Javascript
JS的反射问题
Apr 07 Javascript
动态的改变IFrame的高度实现IFrame自动伸展适应高度
Dec 28 Javascript
js获取URL的参数的方法(getQueryString)示例
Sep 29 Javascript
使用JavaScript 实现的人脸检测
Mar 24 Javascript
简单的jQuery入门指引
Jul 28 Javascript
Jquery针对tr td的一些实用操作方法(必看篇)
Oct 05 Javascript
JS DOMReady事件的六种实现方法总结
Nov 23 Javascript
Vue.js实现表格动态增加删除的方法(附源码下载)
Jan 20 Javascript
JS中cookie的使用及缺点讲解
May 13 Javascript
JS实现页面打印(整体、局部)
Aug 18 Javascript
vue强制刷新组件的方法示例
Feb 28 Javascript
Javascript操作表单实例讲解(下)
Jun 20 #Javascript
jQuery获取多种input值的简单实现方法
Jun 20 #Javascript
jQuery图片左右滚动代码 有左右按钮实例
Jun 20 #Javascript
JavaScript操作表单实例讲解(上)
Jun 20 #Javascript
jquery 获取select数组与name数组长度的实现代码
Jun 20 #Javascript
JavaScript提升性能的常用技巧总结【经典】
Jun 20 #Javascript
使用jQuery给input标签设置默认值
Jun 20 #Javascript
You might like
php排序算法(冒泡排序,快速排序)
2012/10/09 PHP
ThinkPHP3.1的Widget新用法
2014/06/19 PHP
php实现在服务器上创建目录的方法
2015/03/16 PHP
PHP中Static(静态)关键字功能与用法实例分析
2019/04/05 PHP
一个挺有意思的Javascript小问题说明
2011/09/26 Javascript
js事件冒泡实例分享(已测试)
2013/04/23 Javascript
JS打开层/关闭层/移动层动画效果的实例代码
2013/05/11 Javascript
jQuery中:last-child选择器用法实例
2014/12/31 Javascript
jQuery结合ajax实现动态加载文本内容
2015/05/19 Javascript
JS实现日期时间动态显示的方法
2015/12/07 Javascript
原生js实现倒计时功能(多种格式调用)
2017/01/12 Javascript
vue-cli 自定义指令directive 添加验证滑块示例
2017/10/19 Javascript
实现div滚动条默认最底部以及默认最右边的示例代码
2017/11/15 Javascript
详解从react转职到vue开发的项目准备
2019/01/14 Javascript
JS基于对象的链表实现与使用方法示例
2019/01/31 Javascript
Vue列表循环从指定下标开始的多种解决方案
2020/04/08 Javascript
vue调用微信JSDK 扫一扫,相册等需要注意的事项
2021/01/03 Vue.js
[02:40]2014DOTA2 国际邀请赛中国区预选赛 四大豪门抵达华西村
2014/05/23 DOTA
[34:08]2018DOTA2亚洲邀请赛3月29日 小组赛B组 VP VS EG
2018/03/30 DOTA
Python实现从百度API获取天气的方法
2015/03/11 Python
Python中IPYTHON入门实例
2015/05/11 Python
python文件操作之目录遍历实例分析
2015/05/20 Python
python获取元素在数组中索引号的方法
2015/07/15 Python
Python实现多线程的两种方式分析
2018/08/29 Python
Django 缓存配置Redis使用详解
2019/07/23 Python
Python pandas RFM模型应用实例详解
2019/11/20 Python
通过python连接Linux命令行代码实例
2020/02/18 Python
python实现银行实战系统
2020/02/26 Python
使用pandas实现筛选出指定列值所对应的行
2020/12/13 Python
python 实现百度网盘非会员上传超过500个文件的方法
2021/01/07 Python
关于HTML5的安全问题开发人员需要牢记的
2012/06/21 HTML / CSS
HTML5里的placeholder属性使用实例和美化显示效果的方法
2014/04/23 HTML / CSS
求职信怎么写范文
2014/05/26 职场文书
团拜会策划方案
2014/06/07 职场文书
医德医风个人工作总结2014
2014/11/14 职场文书
Win10鼠标轨迹怎么开 Win10显示鼠标轨迹方法
2022/04/06 数码科技