js跨浏览器的事件侦听器和事件对象的使用方法


Posted in Javascript onDecember 17, 2015

本文特意为跨浏览器实现添加事件侦听器和跨浏览器事件对象的使用方法做了下总结,并把这些方法打包,欢迎大家学习。
打包的一个EventUtil对象

var EventUtil = {
    // 添加侦听事件
    addEventListener:function (element, type, handler) {
      // IE9+、Firefox、Safari、chrome和Opera
      if(element.addEventListener) {
        element.addEventListener(type, handler, false);
      }
      // IE8-
      else if(element.attachEvent) {
        element.attachEvent("on" + type, handler);
      }
    },
    
    // 移除侦听事件
    removeEventListener:function (element, type, handler) {
      // IE9+、Firefox、Safari、chrome和Opera
      if(element.addEventListener) {
        element.removeEventListener(type, handler, false);
      }
      // IE8-
      else if(element.attachEvent) {
        element.detachEvent("on" + type, handler);
      }
    },
    
    // 获取事件对象
    getEvent:function(event) {
      if(typeof event == "undefined") {
        event = window.event; // IE浏览器
      }
      return event;
    },
    
    // 获取触发事件的元素
    getTarget:function(event){
      if(typeof event.srcElement == "undefined") {
        return event.target;
      }else {
        return event.srcElement; // IE浏览器
      }
    },
    
    // 获取事件类型
    getType:function(event) {
      return event.type;
    },
    
    // 获取按键键码
    getCharCode:function(event) {
      if(typeof event.keyCode == "number") {
        return event.keyCode; // IE8-、Firefox和opera
      }else {
        return event.charCode; 
      }
    },
    
    // 获取鼠标相对于文档的位置,即页面坐标位置
    getPagePosition:function(event) {
      var pageX = event.pageX,
        pageY = event.pageY;
      if(pageX == undefined) {
        pageX = event.clientX + (document.body.scrollLeft || document.documentElement.scrollLeft);
      }
      if(pageY == undefined) {
        pageY = event.clientY + (document.body.scrollTop || document.documentElement.scrollTop);
      }
      return {
        pageX:pageX,
        pageY:pageY
      };
    },
    
    // 阻止事件的默认行为
    preventDefault:function(event) {
      if(event.preventDefault){
        event.preventDefault();
      }else {
        event.returnValue = false; // IE浏览器
      }
    },
    
    // 阻止事件冒泡
    stopPropagation:function(event) {
      if(typeof event.cancelBubble == "undefined") {
        event.stopPropagation();
      }else {
        event.cancelBubble = true; // IE浏览器
      }
    }
  };

测试代码

<div id="box" style="color:red;width: 100%;height:200px;" >
  <input type="button" value="点击" id="btn" />
</div>
<a href="http://www.test.com" id="a">test</a>
var box = document.querySelector("#box");
  box.onclick = function(event) {
    event = EventUtil.getEvent(event);
    alert(EventUtil.getType(event));
    alert(EventUtil.getTarget(event));
  };
  var input = document.querySelector("input");
  input.onclick = function(event) {
    event = EventUtil.getEvent(event);
    EventUtil.stopPropagation(event);
  };
  
  var a = document.getElementById("a");
  a.onclick = function(event) {
    event = EventUtil.getEvent(event);
    EventUtil.preventDefault(event);
  };

以上就是跨浏览器实现添加事件侦听器和跨浏览器事件对象的使用方法,希望对大家的学习有所帮助。

Javascript 相关文章推荐
关于jQuery object and DOM element
Apr 15 Javascript
js中Math之random,round,ceil,floor的用法总结
Dec 26 Javascript
JavaScript中的数学运算介绍
Dec 29 Javascript
freemarker判断对象是否为空的方法
Aug 13 Javascript
JS 实现倒计时数字时钟效果【附实例代码】
Mar 30 Javascript
实例讲解JavaScript中instanceof运算符的用法
Jun 08 Javascript
基于javascript实现的购物商城商品倒计时实例
Dec 11 Javascript
微信小程序 标签传入数据
May 08 Javascript
解决vue页面刷新或者后退参数丢失的问题
Mar 13 Javascript
vue基础之事件简写、事件对象、冒泡、默认行为、键盘事件实例分析
Mar 11 Javascript
小程序按钮避免多次调用接口和点击方案实现(不用showLoading)
Apr 15 Javascript
输入框跟随文字内容适配宽实现示例
Aug 14 Javascript
js调出上下文菜单的实例
Dec 17 #Javascript
快速掌握WordPress中加载JavaScript脚本的方法
Dec 17 #Javascript
JSONObject使用方法详解
Dec 17 #Javascript
JS实现alert中显示换行的方法
Dec 17 #Javascript
JavaScript中Function函数与Object对象的关系
Dec 17 #Javascript
jQuery实现进度条效果代码
Dec 17 #Javascript
JavaScript创建对象的方式小结(4种方式)
Dec 17 #Javascript
You might like
PHP 日常开发小技巧
2009/09/23 PHP
php实现把url转换迅雷thunder资源下载地址的方法
2014/11/07 PHP
PHP版本常用的排序算法汇总
2015/12/20 PHP
thinkPHP3.1验证码的简单实现方法
2016/04/22 PHP
laravel自定义分页效果
2017/07/23 PHP
PHP-FPM 设置多pool及配置文件重写操作示例
2019/10/02 PHP
用js计算页面执行时间的函数
2006/12/07 Javascript
jQuery实现随意改变div任意属性的名称和值(部分原生js实现)
2013/05/28 Javascript
js获取时间并实现字符串和时间戳之间的转换
2015/01/05 Javascript
基于jquery实现轮播特效
2016/04/22 Javascript
第九篇Bootstrap导航菜单创建步骤详解
2016/06/21 Javascript
详解JSON1:使用TSQL查询数据和更新JSON数据
2016/11/21 Javascript
JQuery统计input和textarea文字输入数量(代码分享)
2016/12/29 Javascript
Bootstrap table使用方法总结
2017/05/10 Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(上)
2018/04/18 Javascript
jquery实现搜索框功能实例详解
2018/07/23 jQuery
微信小程序ibeacon三点定位详解
2018/10/31 Javascript
JQuery搜索框自动补全(模糊匹配)功能实现示例
2019/01/08 jQuery
详解JavaScript函数callee、call、apply的区别
2019/03/08 Javascript
JavaScript定时器设置、使用与倒计时案例详解
2019/07/08 Javascript
聊聊Vue中provide/inject的应用详解
2019/11/10 Javascript
vue 在methods中调用mounted的实现操作
2020/08/07 Javascript
Python字符和字符值(ASCII或Unicode码值)转换方法
2015/05/21 Python
利用Anaconda完美解决Python 2与python 3的共存问题
2017/05/25 Python
Python实现句子翻译功能
2017/11/14 Python
pytorch 输出中间层特征的实例
2019/08/17 Python
Pycharm+Python工程,引用子模块的实现
2020/03/09 Python
好矿嫂事迹材料
2014/01/21 职场文书
自我鉴定总结
2014/03/24 职场文书
共筑中国梦演讲稿
2014/04/23 职场文书
卖车协议书范本4篇
2014/10/01 职场文书
python 三边测量定位的实现代码
2021/04/22 Python
golang gopm get -g -v 无法获取第三方库的解决方案
2021/05/05 Golang
Python 处理表格进行成绩排序的操作代码
2021/07/26 Python
Python极值整数的边界探讨分析
2021/09/15 Python
如何Tomcat中使用ipv6地址
2022/05/06 Servers