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 相关文章推荐
js类中获取外部函数名的方法
Aug 19 Javascript
javascript实现上传图片前的预览(TX的面试题)
Aug 20 Javascript
AppBaseJs 类库 网上常用的javascript函数及其他js类库写的
Mar 04 Javascript
js中有关IE版本检测
Jan 04 Javascript
基于jQuery实现音乐播放试听列表
Apr 14 Javascript
使用jQuery Mobile框架开发移动端Web App的入门教程
May 17 Javascript
Bootstrap开发实战之第一次接触Bootstrap
Jun 02 Javascript
基于JS实现发送短信验证码后的倒计时功能(无视页面刷新,页面关闭不进行倒计时功能)
Sep 02 Javascript
jQuery扇形定时器插件pietimer使用方法详解
Jul 18 jQuery
详解javascript设计模式三:代理模式
Mar 25 Javascript
layer弹出层倒计时关闭的实现方法
Sep 27 Javascript
Openlayers学习之加载鹰眼控件
Sep 28 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数据库连接
2006/10/09 PHP
php发送post请求的三种方法
2014/02/11 PHP
php中替换字符串中的空格为逗号','的方法
2014/06/09 PHP
ThinkPHP实现将SESSION存入MYSQL的方法
2014/07/22 PHP
PHP单例模式是什么 php实现单例模式的方法
2016/05/14 PHP
PHP数组操作简单案例分析
2016/10/15 PHP
php多进程并发编程防止出现僵尸进程的方法分析
2020/02/28 PHP
javascript ajax的5种状态介绍
2014/08/18 Javascript
jQuery结合HTML5制作的爱心树表白动画
2015/02/01 Javascript
javascript绘制漂亮的心型线效果完整实例
2016/02/02 Javascript
JavaScript希尔排序、快速排序、归并排序算法
2016/05/08 Javascript
Jquery获取第一个子元素简单实例
2016/06/02 Javascript
jquery-mobile表单的创建方法详解
2016/11/23 Javascript
多个上传文件用js验证文件的格式和大小的方法(推荐)
2017/03/09 Javascript
ES6使用Set数据结构实现数组的交集、并集、差集功能示例
2017/10/31 Javascript
关于ckeditor在bootstrap中modal中弹框无法输入的解决方法
2019/09/11 Javascript
JavaScript 替换所有匹配内容及正则替换方法
2020/02/12 Javascript
element el-tree组件的动态加载、新增、更新节点的实现
2020/02/27 Javascript
Vue父组件向子组件传值以及data和props的区别详解
2020/03/02 Javascript
ES6中的Javascript解构的实现
2020/10/30 Javascript
详解JavaScript原型与原型链
2020/11/16 Javascript
jQuery实现电梯导航模块
2020/12/22 jQuery
Python中的测试模块unittest和doctest的使用教程
2015/04/14 Python
python3设计模式之简单工厂模式
2017/10/17 Python
We Fashion荷兰:一家国际时装公司
2018/04/18 全球购物
Spartoo荷兰:鞋子、包包和服装
2018/07/12 全球购物
银行职业规划书范文
2013/12/28 职场文书
护士演讲稿范文
2014/01/05 职场文书
财务人员求职自荐书范文
2014/02/10 职场文书
幼儿园大班评语大全
2014/04/17 职场文书
药剂专业自荐书
2014/06/20 职场文书
注册资产评估专业求职信
2014/07/16 职场文书
2014年青年教师工作总结
2014/12/17 职场文书
2014年图书馆个人工作总结
2014/12/18 职场文书
MySQL中的布尔值,怎么存储false或true
2021/06/04 MySQL
JavaScript利用html5新方法操作元素类名详解
2021/11/27 Javascript