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 相关文章推荐
apycom出品的jQuery精美菜单破解方法
Feb 18 Javascript
基于jquery可配置循环左右滚动例子
Sep 09 Javascript
Javascript setInterval的两种调用方法(实例讲解)
Nov 29 Javascript
使用pjax实现无刷新更改页面url
Feb 05 Javascript
Jquery中基本选择器用法实例详解
May 18 Javascript
jquery对象和DOM对象的任意相互转换
Feb 21 Javascript
js中最容易被忽视的事件问题大总结
May 15 Javascript
Javascript 对cookie操作详解及实例
Dec 29 Javascript
优雅地使用loading(推荐)
Apr 20 Javascript
vue响应式更新机制及不使用框架实现简单的数据双向绑定问题
Jun 27 Javascript
JavaScript canvas实现雪花随机动态飘落
Feb 08 Javascript
在VUE中使用lodash的debounce和throttle操作
Nov 09 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 获取远程网页内容的代码(fopen,curl已测)
2011/06/06 PHP
php读取目录及子目录下所有文件名的方法
2014/10/20 PHP
php中in_array函数用法探究
2014/11/25 PHP
js Array对象的扩展函数代码
2013/04/24 Javascript
Javascript浅谈之this
2013/12/17 Javascript
JavaScript数组深拷贝和浅拷贝的两种方法
2014/04/16 Javascript
鼠标移到图片上变大显示而不是放大镜效果
2014/06/15 Javascript
jQuery中的编程范式详解
2014/12/15 Javascript
基于jQuery插件实现环形图标菜单旋转切换特效
2015/05/15 Javascript
JavaScript实现图片轮播的方法
2015/07/31 Javascript
js Canvas绘制圆形时钟效果
2017/02/17 Javascript
微信小程序 地图map实例详解
2017/06/07 Javascript
vue2.x select2 指令封装详解
2017/10/12 Javascript
JS实现的按钮点击颜色切换功能示例
2017/10/19 Javascript
vue路由插件之vue-route
2019/06/13 Javascript
详解一些适用于Node.js的命名约定
2019/12/08 Javascript
答题辅助python代码实现
2018/01/16 Python
在python中使用xlrd获取合并单元格的方法
2018/12/26 Python
Python3中列表list合并的四种方法
2019/04/19 Python
python matplotlib画盒图、子图解决坐标轴标签重叠的问题
2020/01/19 Python
Python selenium模拟手动操作实现无人值守刷积分功能
2020/05/13 Python
详解numpy1.19.4与python3.9版本冲突解决
2020/12/15 Python
美国最灵活的移动提供商:Tello
2017/07/18 全球购物
Ibatis的核心配置文件都有什么
2014/09/08 面试题
Java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类
2012/02/06 面试题
一份软件工程师的面试试题
2016/02/01 面试题
投标保密承诺书
2014/05/19 职场文书
公司外出活动方案
2014/08/14 职场文书
2015年爱国卫生工作总结
2015/04/22 职场文书
学习经验交流会策划书
2015/11/02 职场文书
医学生自荐信范文(2016精选篇)
2016/01/28 职场文书
生鲜超市—未来中国最具有潜力零售业态
2019/08/02 职场文书
Go Gin实现文件上传下载的示例代码
2021/04/02 Golang
Python中的np.argmin()和np.argmax()函数用法
2021/06/02 Python
html+css实现环绕倒影加载特效
2021/07/07 HTML / CSS
TypeScript中条件类型精读与实践记录
2021/10/05 Javascript