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 相关文章推荐
extjs 学习笔记 四 带分页的grid
Oct 20 Javascript
Javascript 异步加载详解(浏览器在javascript的加载方式)
May 20 Javascript
JQuery for与each性能比较分析
May 14 Javascript
js下拉选择框与输入框联动实现添加选中值到输入框的方法
Aug 17 Javascript
js图片轮播手动切换效果
Nov 10 Javascript
灵活的理解JavaScript中的this指向
Feb 25 Javascript
js的form表单提交url传参数(包含+等特殊字符)的两种解决方法
May 25 Javascript
vue的Virtual Dom实现snabbdom解密
May 03 Javascript
javaScript实现滚动条事件详解
Mar 24 Javascript
如何在基于vue-cli的项目自定义打包环境
Nov 10 Javascript
详解微信小程序之scroll-view的flex布局问题
Jan 16 Javascript
解决JQuery的ajax函数执行失败alert函数弹框一闪而过问题
Apr 10 jQuery
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
利用递归把多维数组转为一维数组的函数
2006/10/09 PHP
php中的实现trim函数代码
2007/03/19 PHP
php面向对象程序设计入门教程
2019/06/22 PHP
jQuery Jcrop插件实现图片选取功能
2011/11/23 Javascript
jQuery实现图片走马灯效果的原理分析
2016/01/16 Javascript
深入分析Javascript事件代理
2016/01/30 Javascript
JavaScript基础知识点归纳(推荐)
2016/07/09 Javascript
AngularJS模仿Form表单提交的实现代码
2016/12/08 Javascript
bootstrap fileinput插件实现预览上传照片功能
2018/01/23 Javascript
layui的table中显示图片方法
2018/08/17 Javascript
微信小程序购物车、父子组件传值及calc的注意事项总结
2018/11/14 Javascript
详解从react转职到vue开发的项目准备
2019/01/14 Javascript
微信小程序实现点击按钮后修改颜色
2019/12/05 Javascript
如何通过javaScript去除字符串两端的空白字符
2020/02/06 Javascript
angula中使用iframe点击后不执行变更检测的问题
2020/05/10 Javascript
vue移动端弹起蒙层滑动禁止底部滑动操作
2020/07/22 Javascript
[02:51]DOTA2战队出征照拍摄花絮 TI3明星化身时尚男模
2013/07/22 DOTA
Python判断列表是否已排序的各种方法及其性能分析
2016/06/20 Python
numpy数组做图片拼接的实现(concatenate、vstack、hstack)
2019/11/08 Python
Pretty Green美国:英式摇滚服饰风格代表品牌之一
2019/01/23 全球购物
项目资料员岗位职责
2013/12/10 职场文书
创建卫生先进单位实施方案
2014/03/10 职场文书
婚礼司仪主持词
2014/03/14 职场文书
企业文化演讲稿
2014/05/20 职场文书
安全宣传标语口号
2014/06/06 职场文书
政风行风整改方案
2014/10/25 职场文书
小学师德师风整改措施
2014/10/27 职场文书
2014年物流工作总结
2014/11/25 职场文书
2014年留守儿童工作总结
2014/12/10 职场文书
2014年企业党建工作总结
2014/12/18 职场文书
离婚协议书的范本
2015/01/27 职场文书
社区重阳节活动总结
2015/03/24 职场文书
2015学校六五普法工作总结
2015/04/22 职场文书
2015中学教师个人工作总结
2015/07/22 职场文书
简历上的自我评价,该怎么写呢?
2019/06/13 职场文书
实战Python爬虫爬取酷我音乐
2022/04/11 Python