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 相关文章推荐
解决iframe的frameborder在chrome/ff/ie下的差异
Aug 12 Javascript
通过JS获取用户本地图片路径并显示的代码
Feb 16 Javascript
JQuery 常用方法和事件详细介绍
Apr 18 Javascript
div浮层,滚动条移动,位置保持不变的4种方法汇总
Dec 11 Javascript
JQuery 给元素绑定click事件多次执行的解决方法
Sep 09 Javascript
vue实现ajax滚动下拉加载,同时具有loading效果(推荐)
Jan 11 Javascript
jQuery实现一个简单的轮播图
Feb 19 Javascript
原生javascript实现分页效果
Apr 21 Javascript
基于node.js实现微信支付退款功能
Dec 19 Javascript
Vue组件之单向数据流的解决方法
Nov 10 Javascript
vue实现下拉加载其实没那么复杂
Aug 13 Javascript
JavaScript中作用域链的概念及用途讲解
Aug 06 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
怎么样可以把 phpinfo()屏蔽掉?
2006/11/24 PHP
PHP开发中常用的字符串操作函数
2011/02/08 PHP
php中防止恶意刷新页面的代码小结
2012/10/31 PHP
探讨如何使用SimpleXML函数来加载和解析XML文档
2013/06/07 PHP
PHP策略模式定义与用法示例
2017/07/27 PHP
Yii框架的路由配置方法分析
2019/09/09 PHP
jquery提升性能最佳实践小结
2010/12/06 Javascript
jquery插件如何使用 jQuery操作Cookie插件使用介绍
2012/12/15 Javascript
jQuery层动画定位滑动效果的方法
2015/04/30 Javascript
JavaScript中字符串(string)转json的2种方法
2015/06/25 Javascript
10个很棒的jQuery代码片段
2015/09/24 Javascript
jquery实现鼠标悬浮停止轮播特效
2020/08/20 Javascript
JavaScript中的普通函数和箭头函数的区别和用法详解
2017/03/21 Javascript
bootstrap如何让dropdown menu按钮式下拉框长度一致
2017/04/10 Javascript
nodejs利用ajax实现网页无刷新上传图片实例代码
2017/06/06 NodeJs
基于Bootstrap的标签页组件及bootstrap-tab使用说明
2017/07/25 Javascript
JavaScript学习笔记之图片库案例分析
2019/01/08 Javascript
layui table 列宽百分比显示的实现方法
2019/09/28 Javascript
python用来获得图片exif信息的库实例分析
2015/03/16 Python
python实现五子棋小游戏
2020/03/25 Python
用scikit-learn和pandas学习线性回归的方法
2019/06/21 Python
python开启debug模式的方法
2019/06/27 Python
wxPython多个窗口的基本结构
2019/11/19 Python
Python中使用gflags实例及原理解析
2019/12/13 Python
python中setuptools的作用是什么
2020/06/19 Python
我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串?
2014/03/30 面试题
大学生村官心得体会范文
2014/01/04 职场文书
简易版租房协议书范本
2014/10/13 职场文书
党员群众路线学习心得体会
2014/11/04 职场文书
违纪检讨书
2015/01/27 职场文书
2015国庆节放假通知范文
2015/07/30 职场文书
利用Python+OpenCV三步去除水印
2021/05/28 Python
idea下配置tomcat避坑详解
2022/04/12 Servers
mysql 8.0.27 绿色解压版安装教程及配置方法
2022/04/20 MySQL
Python使用openpyxl模块处理Excel文件
2022/06/05 Python
Python 避免字典和元组的多重嵌套问题
2022/07/15 Python