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 操作XML入门
Dec 25 Javascript
extjs fckeditor集成代码
May 10 Javascript
对xmlHttp对象的理解
Jan 17 Javascript
基于jQuery的倒计时实现代码
May 30 Javascript
jQuery实现鼠标移到元素上动态提示消息框效果
Oct 20 Javascript
jquery删除提示框弹出是否删除对话框
Jan 07 Javascript
Array 重排序方法和操作方法的简单实例
Jan 24 Javascript
30个经典的jQuery代码开发技巧
Dec 15 Javascript
javaScript的函数对象的声明详解
Feb 06 Javascript
详解JavaScript中的every()方法
Jun 08 Javascript
使用vue-router beforEach实现判断用户登录跳转路由筛选功能
Jun 25 Javascript
CKEditor4配置与开发详细中文说明文档
Oct 08 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写的获取各搜索蜘蛛爬行记录代码
2012/08/21 PHP
smarty模板引擎使用内建函数foreach循环取出所有数组值的方法
2015/01/22 PHP
php实现的简单美国商品税计算函数
2015/07/13 PHP
js获取下拉列表框中的value和text的值示例代码
2014/01/11 Javascript
JavaScript获取伪元素(Pseudo-Element)属性的方法技巧
2015/03/13 Javascript
JS实现仿新浪微博发布内容为空时提示功能代码
2015/08/19 Javascript
从零学习node.js之mysql数据库的操作(五)
2017/02/24 Javascript
View.post() 不靠谱的地方你知道多少
2017/08/29 Javascript
浅谈Vue.js 组件中的v-on绑定自定义事件理解
2017/11/17 Javascript
JavaScript面向对象的程序设计(犯迷糊的小羊)
2018/05/27 Javascript
vue-router+nginx 非根路径配置方法
2018/06/30 Javascript
js笔试题-接收get请求参数
2019/06/15 Javascript
JavaScript数组及常见操作方法小结
2019/11/13 Javascript
在vue中使用axios实现post方式获取二进制流下载文件(实例代码)
2019/12/16 Javascript
使用 Opentype.js 生成字体子集的实例代码详解
2020/05/25 Javascript
Vue使用v-viewer实现图片预览
2020/10/21 Javascript
[44:10]2018DOTA2亚洲邀请赛 4.5 淘汰赛 EG vs VP 第一场
2018/04/06 DOTA
python线程池(threadpool)模块使用笔记详解
2017/11/17 Python
Python实现文件信息进行合并实例代码
2018/01/17 Python
儿童python练习实例
2018/05/27 Python
解决Python3中的中文字符编码的问题
2018/07/18 Python
python将.ppm格式图片转换成.jpg格式文件的方法
2018/10/27 Python
使用Django开发简单接口实现文章增删改查
2019/05/09 Python
通过python实现弹窗广告拦截过程详解
2019/07/10 Python
浅谈Python2之汉字编码为unicode的问题(即类似\xc3\xa4)
2019/08/12 Python
解决Djang2.0.1中的reverse导入失败的问题
2019/08/16 Python
python实现贪吃蛇双人大战
2020/04/18 Python
css3实现超炫风车特效
2014/11/12 HTML / CSS
为什么使用接口?
2014/08/13 面试题
教师师德教育的自我评价
2013/10/31 职场文书
大学本科毕业生求职信范文
2013/12/18 职场文书
风险评估实施方案
2014/03/09 职场文书
教师工作表现评语
2014/12/31 职场文书
2016党校学习心得体会范文
2016/01/07 职场文书
Java练习之潜艇小游戏的实现
2022/03/16 Java/Android
Python docx库删除复制paragraph及行高设置图片插入示例
2022/07/23 Python