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 遮照层实现代码
Mar 31 Javascript
用js模拟JQuery的show与hide动画函数代码
Sep 20 Javascript
URL地址中的#符号使用说明
Feb 12 Javascript
jquery默认校验规则整理
Mar 24 Javascript
删除Javascript Object中间的key
Nov 18 Javascript
Javascript快速排序算法详解
Dec 03 Javascript
JS多物体实现缓冲运动效果示例
Dec 20 Javascript
详解Require.js与Sea.js的区别
Aug 05 Javascript
vue router 跳转后回到顶部的实例
Aug 31 Javascript
详解写好JS条件语句的5条守则
Feb 28 Javascript
JS中数据结构与算法---排序算法(Sort Algorithm)实例详解
Jun 17 Javascript
解决vue bus.$emit触发第一次$on监听不到问题
Jul 28 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
Sony CFR 320 修复改造
2020/03/14 无线电
隐藏你的.php文件的实现方法
2007/03/19 PHP
PHP header()函数使用详细(301、404等错误设置)
2013/04/17 PHP
php格式输出文件var_export函数实例
2014/11/15 PHP
PHP图像处理类库及演示分享
2015/05/17 PHP
PHP设置Cookie的HTTPONLY属性方法
2017/02/09 PHP
php实现多维数组排序的方法示例
2017/03/23 PHP
Laravel 5.4重新登录实现跳转到登录前页面的原理和方法
2017/07/13 PHP
jQuery的实现原理的模拟代码 -4 重要的扩展函数 extend
2010/08/03 Javascript
JavaScript 小型打飞机游戏实现原理说明
2010/10/28 Javascript
如何编写高质量JS代码
2014/12/28 Javascript
JavaScript function函数种类详解
2016/02/22 Javascript
jQuery代码实现表格中点击相应行变色功能
2016/05/09 Javascript
js匿名函数作为函数参数详解
2016/06/01 Javascript
关于网页中的无缝滚动的js代码
2016/06/09 Javascript
JavaScript页面实时显示当前时间实例代码
2016/10/23 Javascript
javascript实现将数字转成千分位的方法小结【5种方式】
2016/12/11 Javascript
用move.js库实现百叶窗特效
2017/02/08 Javascript
jquery动态添加带有样式的HTML标签元素方法
2018/02/24 jQuery
详解React 的几种条件渲染以及选择
2018/10/23 Javascript
小程序最新获取用户昵称和头像的方法总结
2019/09/23 Javascript
Vue3为什么这么快
2020/09/23 Javascript
python基础入门详解(文件输入/输出 内建类型 字典操作使用方法)
2013/12/08 Python
python中pika模块问题的深入探究
2018/10/13 Python
python try except 捕获所有异常的实例
2018/10/18 Python
Python 中PyQt5 点击主窗口弹出另一个窗口的实现方法
2019/07/04 Python
python  文件的基本操作 菜中菜功能的实例代码
2019/07/17 Python
opencv3/C++实现视频背景去除建模(BSM)
2019/12/11 Python
亿企通软件测试面试题
2012/04/10 面试题
简历里的自我评价
2014/01/31 职场文书
学生个人自我鉴定
2014/03/26 职场文书
消防宣传口号
2014/06/16 职场文书
临床医学专业求职信
2014/08/08 职场文书
教学改革问题查摆整改措施
2014/09/27 职场文书
2015年教师师德师风承诺书
2015/04/28 职场文书
婚庆司仪开场白
2015/05/29 职场文书