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 相关文章推荐
用apply让javascript函数仅执行一次的代码
Jun 27 Javascript
js控制浏览器全屏示例代码
Feb 20 Javascript
简单介绍JavaScript的变量和数据类型
Jun 03 Javascript
详解JavaScript ES6中的Generator
Jul 28 Javascript
jQuery中deferred对象使用方法详解
Jul 14 Javascript
简单实现AngularJS轮播图效果
Apr 10 Javascript
jQuery简单实现遍历单选框的方法
Mar 06 Javascript
100行代码理解和分析vue2.0响应式架构
Mar 09 Javascript
解决select2在bootstrap modal中不能正常使用的问题
Aug 09 Javascript
JS中实现一个下载进度条及播放进度条的代码
Jun 10 Javascript
原生js代码能实现call和bind吗
Jul 31 Javascript
layui点击左侧导航栏,实现不刷新整个页面,只刷新局部的方法
Sep 25 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
水质对咖图啡风味的影响具体有哪些
2021/03/03 冲泡冲煮
用php+mysql一个名片库程序
2006/10/09 PHP
基于HTTP长连接的"服务器推"技术的php 简易聊天室
2009/10/31 PHP
Linux下创建nginx脚本-start、stop、reload…
2014/08/03 PHP
教你php如何实现验证码
2016/01/20 PHP
Laravel5权限管理方法详解
2016/07/26 PHP
dojo 之基础篇(二)之从服务器读取数据
2007/03/24 Javascript
用 Javascript 验证表单(form)中的单选(radio)值
2009/09/08 Javascript
js 分页全选或反选标识实现代码
2011/08/09 Javascript
使用jQuery validate 验证注册表单实例演示
2013/03/25 Javascript
基于mouseout和mouseover等类似事件的冒泡问题解决方法
2013/11/18 Javascript
父节点获取子节点的字符串示例代码
2014/02/26 Javascript
Jquery原生态实现表格header头随滚动条滚动而滚动
2014/03/18 Javascript
网页中表单按回车就自动提交的问题的解决方案
2014/11/03 Javascript
node.js中的path.delimiter方法使用说明
2014/12/09 Javascript
JavaScript验证Email(3种方法)
2015/09/21 Javascript
angularjs使用directive实现分页组件的示例
2017/02/07 Javascript
JS实现禁止用户使用Ctrl+鼠标滚轮缩放网页的方法
2017/04/28 Javascript
Angular父组件调用子组件的方法
2018/04/02 Javascript
三分钟学会用ES7中的Async/Await进行异步编程
2018/06/14 Javascript
JS使用队列对数组排列,基数排序算法示例
2019/03/02 Javascript
layer.alert回调函数执行关闭弹窗的实例
2019/09/11 Javascript
node.js基于dgram数据报模块创建UDP服务器和客户端操作示例
2020/02/12 Javascript
Python实现windows下模拟按键和鼠标点击的方法
2015/03/13 Python
Python脚本获取操作系统版本信息
2016/12/17 Python
Python实现树莓派WiFi断线自动重连的实例代码
2017/03/16 Python
美国打印机墨水和碳粉购物网站:QuikShip Toner
2018/08/29 全球购物
C#面试问题
2016/07/29 面试题
优秀老师事迹材料
2014/02/05 职场文书
怎么写好自荐书
2014/03/02 职场文书
交通事故委托书范本精选
2014/10/04 职场文书
党员教师群众路线个人整改措施
2014/10/28 职场文书
公务员检讨书
2014/11/01 职场文书
2015年食堂工作总结报告
2015/04/23 职场文书
《认识钟表》教学反思
2016/02/16 职场文书
cypress测试本地web应用
2022/06/01 Javascript