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 相关文章推荐
自动更新作用
Oct 08 Javascript
ExtJs纵坐标值重复问题的解决方法
Feb 27 Javascript
创建js对象和js类的方法汇总
Dec 24 Javascript
Bootstrap框架动态生成Web页面文章内目录的方法
May 12 Javascript
vue.js通过自定义指令实现数据拉取更新的实现方法
Oct 18 Javascript
bootstrap手风琴制作方法详解
Jan 11 Javascript
JQuery判断正整数整理小结
Aug 21 jQuery
Vue-CLI 项目在pycharm中配置方法
Aug 30 Javascript
微信分享invalid signature签名错误踩过的坑
Apr 11 Javascript
Node.js设置定时任务之node-schedule模块的使用详解
Apr 28 Javascript
微信小程序实现转盘抽奖
Sep 21 Javascript
解决ant design vue中树形控件defaultExpandAll设置无效的问题
Oct 26 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实现的mongodb操作类
2015/05/28 PHP
JS查看对象功能代码
2008/04/25 Javascript
js FLASH幻灯片字符串中有连接符&的处理方法
2012/03/01 Javascript
常用的jQuery前端技巧收集
2014/12/24 Javascript
JavaScript中几种排序算法的简单实现
2015/07/29 Javascript
使用AJAX实现Web页面进度条的实例分享
2016/05/06 Javascript
原生js实现查询天气小应用
2016/12/09 Javascript
js返回顶部实例分享
2016/12/21 Javascript
ES5学习教程之Array对象
2017/04/01 Javascript
纯js实现的积木(div层)拖动功能示例
2017/07/19 Javascript
详解vue mint-ui源码解析之loadmore组件
2017/10/11 Javascript
利用Vue2.x开发实现JSON树的方法
2018/01/04 Javascript
vue自定义tap指令及tap事件的实现
2018/09/18 Javascript
python实现ipsec开权限实例
2014/11/11 Python
Python生成随机验证码的两种方法
2015/12/22 Python
Python错误: SyntaxError: Non-ASCII character解决办法
2017/06/08 Python
Go/Python/Erlang编程语言对比分析及示例代码
2018/04/23 Python
python3获取当前文件的上一级目录实例
2018/04/26 Python
利用Python实现原创工具的Logo与Help
2018/12/03 Python
python 命名规范知识点汇总
2020/02/14 Python
python 中的命名空间,你真的了解吗?
2020/08/19 Python
详解Scrapy Redis入门实战
2020/11/18 Python
python中字符串的编码与解码详析
2020/12/03 Python
详解CSS 3 中的 calc() 方法
2018/01/12 HTML / CSS
日本一家专门经营各种箱包的大型网站:Traveler Store
2016/08/03 全球购物
PurCotton全棉时代官网:100%天然棉花生产的生活护理用品
2016/11/18 全球购物
犹他州最古老的体育用品公司:Al’s
2020/12/18 全球购物
说一下Linux下有关用户和组管理的命令
2016/01/04 面试题
门诊手术室工作制度
2014/01/30 职场文书
婚前协议书范本
2014/04/15 职场文书
音乐节策划方案
2014/06/09 职场文书
三八红旗手事迹材料
2014/12/26 职场文书
教师党员自我评价2015
2015/03/04 职场文书
Django使用channels + websocket打造在线聊天室
2021/05/20 Python
图文详解matlab原始处理图像几何变换
2021/07/09 Python
JavaScript文档对象模型DOM
2021/11/20 Javascript