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 相关文章推荐
表单提交验证类
Jul 14 Javascript
9个javascript语法高亮插件 推荐
Jul 18 Javascript
Jquery 插件开发笔记整理
Jan 17 Javascript
JQuery获取浏览器窗口内容部分高度的代码
Feb 24 Javascript
ExtJs设置GridPanel表格文本垂直居中示例
Jul 15 Javascript
js(jQuery)获取时间的方法及常用时间类搜集
Oct 23 Javascript
JS简单实现城市二级联动选择插件的方法
Aug 19 Javascript
详解基于webpack和vue.js搭建开发环境
Apr 05 Javascript
基于javascript中的typeof和类型判断(详解)
Oct 27 Javascript
vue-router实现嵌套路由的讲解
Jan 19 Javascript
vue.js自定义组件实现v-model双向数据绑定的示例代码
Jan 08 Javascript
用React Native制作一个简单的游戏引擎
May 27 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简单系统数据添加以及数据删除模块源文件下载
2008/06/07 PHP
一个显示某段时间内每个月的方法 返回由这些月份组成的数组
2012/05/16 PHP
PHP实现的简单排列组合算法应用示例
2017/06/20 PHP
详细解读php的命名空间(二)
2018/02/21 PHP
PHP设计模式之观察者模式定义与用法示例
2018/08/04 PHP
PHP实现数组和对象的相互转换操作示例
2019/03/20 PHP
jQuery插件原来如此简单 jQuery插件的机制及实战
2012/02/07 Javascript
javascript window.confirm确认 取消对话框实现代码小结
2012/10/21 Javascript
jquery使用jxl插件导出excel示例
2014/04/14 Javascript
js获取网页可见区域、正文以及屏幕分辨率的高度
2014/05/15 Javascript
Jquery图片延迟加载插件jquery.lazyload.js的使用方法
2014/05/21 Javascript
jQuery中andSelf()方法用法实例
2015/01/08 Javascript
详解Angularjs在控制器(controller.js)中使用过滤器($filter)格式化日期/时间实例
2017/02/17 Javascript
微信小程序 setData使用方法及常用错误解决办法
2017/05/11 Javascript
AngularJS日程表案例详解
2017/08/15 Javascript
JS中的回调函数实例浅析
2018/03/21 Javascript
JavaScript DOM元素常见操作详解【添加、删除、修改等】
2018/05/09 Javascript
又拍云 Node.js 实现文件上传、删除功能
2018/10/28 Javascript
详解Vue.js在页面加载时执行某个方法
2018/11/20 Javascript
详解基于vue-cli3快速发布一个fullpage组件
2019/03/08 Javascript
vue使用keep-alive保持滚动条位置的实现方法
2019/04/09 Javascript
微信小程序实现pdf、word等格式文件上传的方法
2019/09/10 Javascript
vue实现顶部菜单栏
2020/11/08 Javascript
[02:32]DOTA2英雄基础教程 美杜莎
2014/01/07 DOTA
[40:01]OG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
[01:04:49]KG vs LGD 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
numpy找出array中的最大值,最小值实例
2018/04/03 Python
Python实现的维尼吉亚密码算法示例
2018/04/12 Python
Pandas之Dropna滤除缺失数据的实现方法
2019/06/25 Python
TensorFlow实现从txt文件读取数据
2020/02/05 Python
python3 os进行嵌套操作的实例讲解
2020/11/19 Python
CSS3 display知识详解
2015/11/25 HTML / CSS
集世界奢侈品和设计师品牌的意大利精品买手店:Tessabit
2019/08/17 全球购物
广告业务员岗位职责
2014/02/06 职场文书
深入理解go slice结构
2021/09/15 Golang
css3手动实现pc端横向滚动
2022/06/21 HTML / CSS