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 相关文章推荐
jquery中通过父级查找进行定位示例
Jun 28 Javascript
关闭浏览器时提示onbeforeunload事件
Dec 25 Javascript
js data日期初始化的5种方法
Dec 29 Javascript
jQuery实现的简单分页示例
Jun 01 Javascript
如何检测JavaScript的各种类型
Jul 30 Javascript
Javascript数组中push方法用法分析
Oct 31 Javascript
JS去掉字符串前后空格或去掉所有空格的用法
Mar 25 Javascript
react-router中的属性详解
Jun 01 Javascript
js异步编程小技巧详解
Aug 14 Javascript
详解基于vue-cli配置移动端自适应
Jan 13 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【凹多边形的分离轴检测算法】
Dec 13 Javascript
JavaScript实现的弹出遮罩层特效经典示例【基于jQuery】
Jul 10 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
如何开发一个虚拟域名系统
2006/10/09 PHP
详解PHP显示MySQL数据的三种方法
2008/06/05 PHP
php使用Smarty的相关注意事项及访问变量的几种方式
2011/12/08 PHP
判断php数组是否为索引数组的实现方法
2013/06/13 PHP
javascript引导程序
2008/10/26 Javascript
Javascript匿名函数的一种应用 代码封装
2010/06/27 Javascript
js网页中的(运行代码)功能实现思路
2013/02/04 Javascript
Jquery 的outerHeight方法使用介绍
2013/09/11 Javascript
完美兼容各大浏览器获取HTTP_REFERER方法总结
2014/06/24 Javascript
JavaScript实现带缓冲效果的随屏滚动漂浮广告代码
2015/11/06 Javascript
Angular.js与Bootstrap相结合实现表格分页代码
2016/04/12 Javascript
Node.js的Web模板引擎ejs的入门使用教程
2016/06/06 Javascript
JavaScript登录验证码的实现
2016/10/27 Javascript
jQuery中checkbox反复调用attr('checked', true/false)只有第一次生效的解决方法
2016/11/16 Javascript
Vue中添加过渡效果的方法
2017/03/16 Javascript
vue.js实现价格格式化的方法
2017/05/23 Javascript
原生JS写Ajax的请求函数功能
2017/12/22 Javascript
解决vue2.0 element-ui中el-upload的before-upload方法返回false时submit()不生效问题
2018/08/24 Javascript
在微信小程序中使用mqtt服务的方法
2019/12/13 Javascript
vue浏览器返回监听的具体步骤
2021/02/03 Vue.js
Python中apply函数的用法实例教程
2014/07/31 Python
python 读取文本文件的行数据,文件.splitlines()的方法
2018/07/12 Python
Django实战之用户认证(初始配置)
2018/07/16 Python
python绘制中国大陆人口热力图
2018/11/07 Python
Python 音频生成器的实现示例
2019/12/24 Python
Python 面向对象部分知识点小结
2020/03/09 Python
tensorflow之读取jpg图像长和宽实例
2020/06/18 Python
解决HTML5中的audio在手机端和微信端的不能自动播放问题
2019/11/04 HTML / CSS
打印机墨盒:123Inkjets
2017/02/16 全球购物
俄罗斯在线服装店:STOLNIK
2021/03/07 全球购物
迪卡侬(Decathlon)加拿大官网:源自法国的运动专业超市
2020/11/22 全球购物
xml有哪些解析技术?区别是什么
2016/04/26 面试题
2015年出纳个人工作总结
2015/04/02 职场文书
家装电话营销开场白
2015/05/29 职场文书
音乐研修感悟
2015/11/18 职场文书
Vue h函数的使用详解
2022/02/18 Vue.js