js事件处理程序跨浏览器解决方案


Posted in Javascript onMarch 27, 2016

本文实例为大家分享了js事件处理程序跨浏览器解决方案,供大家参考,具体内容如下

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<div>
<input type="button" id="button1" value="按钮" />
</div>
<script type="text/javascript">

function show(){


alert("Hello world!");

}

//声明一个对象

var eventUtil={

//添加句柄


addHandler:function(element,type,handler){

//DOM2级事件处理判断


if(element.addEventListener){



element.addEventListener(type,handler,false);


}else if(element.attachEvent){//IE事件处理判断



element.attachEvent('on'+type,handler);


}else{//DOM0级事件判断



element['on'+type]=handler;


}

},

//删除句柄

removeHandler:function(element,type,handler){

//DOM2级事件处理判断

if(element.removeEventListener){


elememt.removeEventListener(type,handler,false);

}else if(element.detachEvent){//IE事件处理判断


element.detachEvent('on'+type,handler);

}else{//DOM0级事件判断


element['on'+type]=null;


}

}
}

eventUtil.addHandler(button3,'click',show);
</script>

</body>
</html>

再为大家分享js原生事件处理跨浏览器的代码:

//跨浏览器的事件处理器添加方式
var EventUtil = {
  addHandler : function(elem, type, handler){
    if(elem.addEventListener){
      elem.addEventListener(type, handler, false);
    }
    else if(elem.attachEvent){
      elem.attachEvent("on" + type, handler);//添加多个同一类型的handler时,IE方式的规则是最后添加的最先触发
    }
    else{
      if(typeof elem["on" + type] === 'function'){
        var oldHandler = elem["on" + type];
        elem["on" + type] = function(){
          oldHandler();
          handler();
        }
      }
      else{
        elem["on" + type] = handler;//支持添加多个事件处理器
      }
    }
  },

  getEvent : function(event){
    return event ? event : window.event;
  },

  getTarget : function(event){
    return event.target || event.srcElement;
  },

  preventDefault : function(event){
    if(event.preventDefault){
      event.preventDefault();
    }
    else{
      event.returnValue = false;
    }
  },

  removeHandler : function(elem, type, handler){
    if(elem.removeEventListener){
      elem.removeEventListener(type, handler, false);
    }
    else if(elem.detachEvent){
      elem.detachEvent("on" + type, handler);
    }
    else{
      elem["on" + type] = null;//不支持移除单一事件处理器,只能全部移除
    }
  },

  stopPropagation : function(event){
    if(event.stopPropagation){
      event.stopPropagation();
    }
    else{
      event.cancelBubble = true;
    }
  },

  getRelatedTarget : function(event){
    if(event.relatedTarget){
      return event.relatedTarget;
    }
    else if(event.toElement && event.type == "mouseout"){
      return event.toElement;
    }
    else if(event.fromElement && event.type == "mouseover"){
      return event.fromElement;
    }
    else{
      return null;
    }
  },

  /*IE8点击左键和中键都是0;FF无法识别中键;Chrome正常*/
  getButton : function(event){//返回0,1,2 - 左,中,右
    if(document.implementation.hasFeature("MouseEvents", "2.0")){
      return event.button;
    }
    else{
      switch(event.button){
        case 0:case 1:case 3:case 5:case 7:
          return 0;
          break;
        case 2:case 6:
          return 2;
          break;
        case 4:
          return 1;
          break;
        default:
          break;
      }
    }
  },

  /*只能检测keypress事件,返回值等于将要显示的字符编码*/
  /*IE和Chrome只有能显示的字符键才触发,FF其它键也能触发,返回值为0*/
  getCharCode : function(event){
    if(typeof event.charCode == "number"){
      return event.charCode;
    }
    else{
      return event.keyCode;
    }
  }
};

以上就是本文的全部内容,希望对大家解决js事件处理程序跨浏览器有所帮助。

Javascript 相关文章推荐
js实现ASP分页函数 HTML分页函数
Sep 22 Javascript
CSS+Table图文混排中实现文本自适应图片宽度(超简单+跨所有浏览器)
Feb 14 Javascript
jQuery插件pagination实现分页特效
Apr 12 Javascript
JavaScript中的原型prototype属性使用详解
Jun 05 Javascript
React Component存在的几种形式详解
Nov 06 Javascript
Vue-CLI3.x 设置反向代理的方法
Dec 06 Javascript
简述pm2常用命令集合及配置文件说明
May 30 Javascript
微信小程序全局变量改变监听的实现方法
Jul 15 Javascript
浅谈layui使用模板引擎动态渲染元素要注意的问题
Sep 14 Javascript
JS正则表达式验证密码强度
Mar 18 Javascript
Js图片点击切换轮播实现代码
Jul 27 Javascript
详解JSON.parse和JSON.stringify用法
Feb 18 Javascript
基于javascript实现九九乘法表
Mar 27 #Javascript
深入浅析JavaScript中的作用域和上下文
Mar 26 #Javascript
JS中改变this指向的方法(call和apply、bind)
Mar 26 #Javascript
浏览器复制插件zeroclipboard使用指南
Mar 26 #Javascript
jquery中validate与form插件提交的方式小结
Mar 26 #Javascript
javascript实现方法调用与方法触发小结
Mar 26 #Javascript
利用jquery制作滚动到指定位置触发动画
Mar 26 #Javascript
You might like
php adodb介绍
2009/03/19 PHP
微信支付的开发流程详解
2016/09/13 PHP
PHP的PDO预定义常量讲解
2019/01/24 PHP
用JS写的一个TableView控件代码
2010/01/23 Javascript
javascript 防止刷新,后退,关闭
2010/08/07 Javascript
Javascript中获取出错代码所在文件及行数的代码
2010/09/23 Javascript
jquery简单的拖动效果实现原理及示例
2013/07/26 Javascript
固定网页背景图同时保持图片比例的思路代码
2013/08/15 Javascript
jQuery中[attribute^=value]选择器用法实例
2014/12/31 Javascript
浅谈JSON.parse()和JSON.stringify()
2015/07/14 Javascript
JS中多种方式创建对象详解
2016/03/22 Javascript
JavaScript学习笔记之ES6数组方法
2016/03/25 Javascript
vue+element的表格实现批量删除功能示例代码
2018/08/17 Javascript
iview tabs 顶部导航栏和模块切换栏的示例代码
2019/03/04 Javascript
微信小程序将页面按钮悬浮固定在底部的实现代码
2020/10/29 Javascript
微信小程序实现下拉加载更多商品
2020/12/29 Javascript
详解Python的Django框架中Manager方法的使用
2015/07/21 Python
python使用电子邮件模块smtplib的方法
2016/08/28 Python
python+requests+unittest API接口测试实例(详解)
2017/06/10 Python
Python 一句话生成字母表的方法
2019/01/02 Python
解决python2 绘图title,xlabel,ylabel出现中文乱码的问题
2019/01/29 Python
对python多线程SSH登录并发脚本详解
2019/02/14 Python
python paramiko远程服务器终端操作过程解析
2019/12/14 Python
Python如何基于smtplib发不同格式的邮件
2019/12/30 Python
在django项目中导出数据到excel文件并实现下载的功能
2020/03/13 Python
Python logging模块异步线程写日志实现过程解析
2020/06/30 Python
浅析python中的del用法
2020/09/02 Python
CSS3教程(4):网页边框和网页文字阴影
2009/04/02 HTML / CSS
HTML5 Canvas 绘图——使用 Canvas 绘制图形图文教程 使用html5 canvas 绘制精美的图
2015/08/31 HTML / CSS
美国婚礼和派对礼品网站:Kate Aspen(新娘送礼会、迎婴派对)
2018/03/28 全球购物
远东集团网络工程师面试题
2014/10/20 面试题
Ruby如何定义一个类
2012/10/08 面试题
销售文员岗位职责
2013/11/29 职场文书
二手房买卖协议书
2014/04/10 职场文书
MySQL系列之十四 MySQL的高可用实现
2021/07/02 MySQL
python文件与路径操作神器 pathlib
2022/04/01 Python