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 相关文章推荐
prettify 代码高亮着色器google出品
Dec 28 Javascript
VBS通过WMI监视注册表变动的代码
Oct 27 Javascript
关于eval 与new Function 到底该选哪个?
Apr 17 Javascript
动态添加删除表格行的js实现代码
Feb 28 Javascript
IE6 hack for js 集锦
Sep 23 Javascript
JS实现FLASH幻灯片图片切换效果的方法
Mar 04 Javascript
AngularJS控制器之间的数据共享及通信详解
Aug 01 Javascript
使用Ajax生成的Excel文件并下载的实例
Nov 21 Javascript
JavaScript实现图片懒加载(Lazyload)
Nov 28 Javascript
vue router demo详解
Oct 13 Javascript
JS中touchstart事件与click事件冲突的解决方法
Mar 12 Javascript
小程序点赞收藏功能的实现代码示例
Sep 07 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 事务处理数据实现代码
2010/05/13 PHP
MySQL的FIND_IN_SET函数使用方法分享
2012/03/27 PHP
thinkphp3.0 模板中函数的使用
2012/11/13 PHP
Zend Framework页面缓存实例
2014/06/25 PHP
PHP中SERIALIZE和JSON的序列化与反序列化操作区别分析
2016/10/11 PHP
php中的buffer缓冲区用法分析
2019/05/31 PHP
关于B/S判断浏览器断开的问题讨论
2008/10/29 Javascript
JQuery中关于jquery.js与jquery.min.js的比较探讨
2013/05/15 Javascript
Jquery实现的角色左右选择特效
2014/05/21 Javascript
jQuery实现form表单基于ajax无刷新提交方法详解
2015/12/08 Javascript
javascript显示上周、上个月日期的处理方法
2016/02/03 Javascript
JS图片放大效果简单实现代码
2016/09/08 Javascript
JS实现加载和读取XML文件的方法详解
2017/04/24 Javascript
angularJs的ng-class切换class
2017/06/23 Javascript
js使用原型对象(prototype)需要注意的地方
2017/08/28 Javascript
详解使用VueJS开发项目中的兼容问题
2018/08/02 Javascript
小程序绑定用户方案优化小结
2019/05/15 Javascript
微信小程序实现侧边分类栏
2019/10/21 Javascript
React 实现车牌键盘的示例代码
2019/12/20 Javascript
探索node之事件循环的实现
2020/10/30 Javascript
Python爬取十篇新闻统计TF-IDF
2018/01/03 Python
Python爬虫包BeautifulSoup异常处理(二)
2018/06/17 Python
Python参数解析模块sys、getopt、argparse使用与对比分析
2019/04/02 Python
python字符串切割:str.split()与re.split()的对比分析
2019/07/16 Python
python用线性回归预测股票价格的实现代码
2019/09/04 Python
Python Tkinter图形工具使用方法及实例解析
2020/06/15 Python
python产生模拟数据faker库的使用详解
2020/11/04 Python
德国化妆品和天然化妆品网上商店:kosmetikfuchs.de
2017/06/09 全球购物
大学生毕业自我评价范文分享
2013/11/11 职场文书
母亲节感恩活动记录
2014/03/16 职场文书
优秀教导主任事迹材料
2014/05/09 职场文书
环境工程专业自荐信范文
2014/06/24 职场文书
竞选纪律委员演讲稿
2014/09/13 职场文书
上课睡觉万能检讨书
2015/02/17 职场文书
2015年领导班子工作总结
2015/05/23 职场文书
JS轻量级函数式编程实现XDM二
2022/06/16 Javascript