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 相关文章推荐
Javascript 遍历页面text控件详解
Jan 06 Javascript
javascript与css3动画结合使用小结
Mar 11 Javascript
javascript数组去重小结
Mar 07 Javascript
JavaScript 消息框效果【实现代码】
Apr 27 Javascript
js时间比较 js计算时间差的简单实现方法
Aug 26 Javascript
JavaScript与java语言有什么不同
Sep 22 Javascript
在localStorage中存储对象数组并读取的方法
Sep 24 Javascript
原生js验证简洁注册登录页面
Dec 17 Javascript
浅谈webpack编译vue项目生成的代码探索
Dec 11 Javascript
微信小程序实现图片压缩功能
Jan 26 Javascript
Vue将页面导出为图片或者PDF
Aug 17 Javascript
Jquery属性的获取/设置及样式添加/删除操作技巧分析
Dec 23 jQuery
基于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防注入安全代码
2008/04/09 PHP
基于PHP常用函数的用法详解
2013/05/10 PHP
ThinkPHP权限认证Auth实例详解
2014/07/22 PHP
PHP 验证登陆类分享
2015/03/13 PHP
PHP读取文件内容的五种方式
2015/12/28 PHP
最新版本PHP 7 vs HHVM 多角度比较
2016/02/14 PHP
28个JS验证函数收集
2010/03/02 Javascript
JAVASCRIPT实现的WEB页面跳转以及页面间传值方法
2010/05/13 Javascript
jquery的trigger和triggerHandler的区别示例介绍
2014/04/20 Javascript
你所不了解的javascript操作DOM的细节知识点(一)
2015/06/17 Javascript
【经典源码收藏】基于jQuery的项目常见函数封装集合
2016/06/07 Javascript
Bootstrap Table使用方法详解
2016/08/01 Javascript
jQuery多个版本和其他js库冲突的解决方法
2016/08/11 Javascript
JavaScript cookie详解及简单实例应用
2016/12/31 Javascript
input输入框内容实时监测(附代码)
2017/08/15 Javascript
JavaScript实现body内任意节点的自定义属性功能示例
2017/09/18 Javascript
karma+webpack搭建vue单元测试环境的方法示例
2018/05/24 Javascript
vue使用技巧及vue项目中遇到的问题
2018/06/04 Javascript
[45:25]完美世界DOTA2联赛循环赛 PXG vs IO 第一场 11.06
2020/11/09 DOTA
Python httplib,smtplib使用方法
2008/09/06 Python
python实现电子词典
2020/04/23 Python
Python聚类算法之基本K均值实例详解
2015/11/20 Python
Python中属性和描述符的正确使用
2016/08/23 Python
PyQt5每天必学之像素图控件QPixmap
2018/04/19 Python
十分钟搞定pandas(入门教程)
2019/06/21 Python
如何通过Python实现标签云算法
2019/07/02 Python
python3实现绘制二维点图
2019/12/04 Python
Python中itertools的用法详解
2020/02/07 Python
python mysql自增字段AUTO_INCREMENT值的修改方式
2020/05/18 Python
英国骑行、跑步、游泳、铁人三项运动装备专卖店:Wiggle
2016/08/23 全球购物
农村面貌改造提升实施方案
2014/03/18 职场文书
婚假请假条怎么写
2014/04/10 职场文书
优秀大学生自荐信
2014/06/09 职场文书
亮剑观后感300字
2015/06/05 职场文书
Java数据开发辅助工具Docker与普通程序使用方法
2021/09/15 Java/Android
Python OpenCV实现图形检测示例详解
2022/04/08 Python