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 相关文章推荐
Javascript SHA-1:Secure Hash Algorithm
Dec 20 Javascript
TextArea设置MaxLength属性最大输入值的js代码
Dec 21 Javascript
javascript实现博客园页面右下角返回顶部按钮
Feb 22 Javascript
Javascript中使用A标签获取当前目录的绝对路径方法
Mar 02 Javascript
javascript遇到html5的一些表单属性
Jul 05 Javascript
javascript url几种编码方式详解
Jun 06 Javascript
jQuery Ajax 异步加载显示等待效果代码分享
Aug 01 Javascript
AngularJs  E2E Testing 详解
Sep 02 Javascript
vue Render中slots的使用的实例代码
Jul 19 Javascript
JointJS流程图的绘制方法
Dec 03 Javascript
vue.js 2.*项目环境搭建、运行、打包发布的详细步骤
May 01 Javascript
基于 vue-skeleton-webpack-plugin 的骨架屏实战
Aug 05 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变量作用域的一些问题
2013/08/08 PHP
PHP 字符串长度判断效率更高的方法
2014/03/02 PHP
合并ThinkPHP配置文件以消除代码冗余的实现方法
2014/07/22 PHP
php微信公众号开发(4)php实现自定义关键字回复
2016/12/15 PHP
php正则提取html图片(img)src地址与任意属性的方法
2017/02/08 PHP
关于jQuery判断元素是否存在的问题示例探讨
2014/07/21 Javascript
上传图片预览JS脚本 Input file图片预览的实现示例
2014/10/23 Javascript
WordPress中鼠标悬停显示和隐藏评论及引用按钮的实现
2016/01/12 Javascript
基于JavaScript实现轮播图代码
2016/07/14 Javascript
JSON对象转化为字符串详解
2017/08/11 Javascript
详解如何用模块化的方式写vuejs
2017/12/16 Javascript
angular4 共享服务在多个组件中数据通信的示例
2018/03/30 Javascript
5分钟学会Vue动画效果(小结)
2018/07/21 Javascript
vue递归组件实战之简单树形控件实例代码
2019/08/27 Javascript
vue自定义标签和单页面多路由的实现代码
2020/05/03 Javascript
[03:04]2018年国际邀请赛典藏宝瓶&莱恩声望物品展示 片尾有彩蛋
2018/06/04 DOTA
学习python 之编写简单乘法运算题
2016/02/27 Python
实现python版本的按任意键继续/退出
2016/09/26 Python
Python实现连接postgresql数据库的方法分析
2017/12/27 Python
python实现拓扑排序的基本教程
2018/03/11 Python
python环形单链表的约瑟夫问题详解
2018/09/27 Python
PyCharm中代码字体大小调整方法
2019/07/29 Python
使用python实现学生信息管理系统
2021/02/25 Python
使用html2canvas将页面转成图并使用用canvas2image下载
2019/04/04 HTML / CSS
高级文秘工作总结的自我评价
2013/09/28 职场文书
英文自荐信格式
2013/11/28 职场文书
小饰品店的创业计划书范文
2013/12/28 职场文书
远程教育心得体会
2014/01/03 职场文书
副乡长民主生活会个人对照检查材料思想汇报
2014/10/01 职场文书
预备党员期盼十八届四中全会召开思想汇报
2014/10/17 职场文书
2015年会计年终工作总结
2015/05/26 职场文书
安全教育观后感
2015/06/17 职场文书
关于远足的感想
2015/08/10 职场文书
驾驶员安全责任协议书
2016/03/22 职场文书
2019员工保密协议书(3篇)
2019/09/23 职场文书
【海涛dota解说】一房久违的影魔魂守二连发
2022/04/01 DOTA