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学习笔记 操作jQuery对象 属性处理
Sep 19 Javascript
js arguments,jcallee caller用法总结
Nov 30 Javascript
js创建一个input数组并绑定click事件的方法
Jun 12 Javascript
jQuery实现自定义右键菜单的树状菜单效果
Sep 02 Javascript
Javascript的比较汇总
Jul 25 Javascript
js闭包用法实例详解
Dec 13 Javascript
简单实现node.js图片上传
Dec 18 Javascript
字太多用...代替的方法(两种)
Mar 15 Javascript
微信小程序实现订单倒计时
Nov 01 Javascript
javascript 对象 与 prototype 原型用法实例分析
Nov 11 Javascript
Vue开发环境跨域访问问题
Jan 22 Javascript
详解vue3.0 的 Composition API 的一种使用方法
Oct 26 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数组函数序列之array_intersect() 返回两个或多个数组的交集数组
2011/11/10 PHP
PHP数据集构建JSON格式及新数组的方法
2012/11/07 PHP
android上传图片到PHP的过程详解
2015/08/03 PHP
phpStudy中升级MySQL版本到5.7.17的方法步骤
2017/08/03 PHP
Javascript 陷阱 window全局对象
2008/11/26 Javascript
JavaScript入门教程 Cookies
2009/01/31 Javascript
jQuery EasyUI 开源插件套装 完全替代ExtJS
2010/03/24 Javascript
css样式标签和js语法属性区别
2013/11/06 Javascript
教你如何自定义百度分享插件以及bshare分享插件的分享按钮
2014/06/20 Javascript
浅谈使用splice函数对数组中的元素进行删除时的注意事项
2016/12/04 Javascript
vue-router中的hash和history两种模式的区别
2018/07/17 Javascript
vue实现一个炫酷的日历组件
2018/10/08 Javascript
微信小程序在地图选择地址并返回经纬度简单示例
2018/12/03 Javascript
echarts统计x轴区间的数值实例代码详解
2019/07/07 Javascript
深入理解Vue keep-alive及实践总结
2019/08/21 Javascript
vuex存储复杂参数(如对象数组等)刷新数据丢失的解决方法
2019/11/05 Javascript
JS实现的定时器展示简单秒表、页面弹框及跳转操作完整示例
2020/01/26 Javascript
Python单链表的简单实现方法
2014/09/23 Python
Python的字典和列表的使用中一些需要注意的地方
2015/04/24 Python
Python黑魔法Descriptor描述符的实例解析
2016/06/02 Python
深入理解Python中的super()方法
2017/11/20 Python
Python xlwt设置excel单元格字体及格式
2020/04/18 Python
Python编程把二叉树打印成多行代码
2018/01/04 Python
对pandas中apply函数的用法详解
2018/04/10 Python
python 脚本生成随机 字母 + 数字密码功能
2018/05/26 Python
Python绘制热力图示例
2019/09/27 Python
python热力图实现简单方法
2021/01/29 Python
css3中背景尺寸background-size详解
2014/09/02 HTML / CSS
高中生期末评语大全
2014/01/28 职场文书
学生安全责任书模板
2014/07/25 职场文书
中秋节国旗下演讲稿
2014/09/05 职场文书
公司给客户的感谢信
2015/01/23 职场文书
服务员岗位职责
2015/02/03 职场文书
百万英镑观后感
2015/06/09 职场文书
Java实现多文件上传功能
2021/06/30 Java/Android
Python实现灰色关联分析与结果可视化的详细代码
2022/03/25 Python