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 相关文章推荐
再谈IE中Flash控件的自动激活 ObjectWrap
Mar 09 Javascript
基于JQuery的动态删除Table表格的行和列的代码
May 12 Javascript
javaScript(JS)替换节点实现思路介绍
Apr 17 Javascript
小巧强大的jquery layer弹窗弹层插件
Dec 06 Javascript
基于javascript编写简单日历
May 02 Javascript
JavaScript实现邮箱地址自动匹配功能代码
Nov 28 Javascript
vue动态生成dom并且自动绑定事件
Apr 19 Javascript
Bootstrap 表单验证formValidation 实现远程验证功能
May 17 Javascript
javascript回调函数的概念理解与用法分析
May 27 Javascript
JS基于ES6新特性async await进行异步处理操作示例
Feb 02 Javascript
利用vue-i18n实现多语言切换效果的方法
Jun 19 Javascript
jQuery zTree插件使用简单教程
Aug 16 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
防止MySQL注入或HTML表单滥用的PHP程序
2009/01/21 PHP
php smarty模板引擎的6个小技巧
2014/04/24 PHP
在Debian系统下配置LNMP的教程
2015/07/09 PHP
10个php函数实用却不常见
2015/10/13 PHP
PHP如何实现跨域
2016/05/30 PHP
php5.5使用PHPMailer-5.2发送邮件的完整步骤
2018/10/14 PHP
PHP 多进程与信号中断实现多任务常驻内存管理实例方法
2019/10/04 PHP
jquery制作select列表双向选择示例代码
2014/09/02 Javascript
通过实例理解javascript中没有函数重载的概念
2015/06/03 Javascript
JS或jQuery获取ASP.NET服务器控件ID的方法
2015/06/08 Javascript
jQuery操作复选框(CheckBox)的取值赋值实现代码
2017/01/10 Javascript
JavaScript实现弹出广告功能
2017/03/30 Javascript
Easyui在treegrid添加控件的实现方法
2017/06/23 Javascript
Js自定义多选框效果的实例代码
2017/07/05 Javascript
基于Vue过渡状态实例讲解
2017/09/14 Javascript
js数组去重的N种方法(小结)
2018/06/07 Javascript
详解使用 Node.js 开发简单的脚手架工具
2018/06/08 Javascript
微信小程序五子棋游戏的悔棋实现方法【附demo源码下载】
2019/02/20 Javascript
vue实现登录页面的验证码以及验证过程解析(面向新手)
2019/08/02 Javascript
详解NodeJs项目 CentOs linux服务器线上部署
2019/09/16 NodeJs
layui点击弹框页面 表单请求的方法
2019/09/21 Javascript
Python 实现域名解析为ip的方法
2019/02/14 Python
Python静态类型检查新工具之pyright 使用指南
2019/04/26 Python
对python 中re.sub,replace(),strip()的区别详解
2019/07/22 Python
pytorch 常用线性函数详解
2020/01/15 Python
python 弧度与角度互转实例
2020/04/15 Python
python关于倒排列的知识点总结
2020/10/13 Python
python使用yaml 管理selenium元素的示例
2020/12/01 Python
美国第一香水网站:Perfume.com
2017/01/23 全球购物
业绩考核岗位职责
2014/02/01 职场文书
党的群众路线教育实践活动个人对照检查材料
2014/09/22 职场文书
求职简历自我评价范文
2015/03/10 职场文书
汽车车尾标语大全
2015/08/11 职场文书
幼儿教师三分钟演讲稿
2019/06/21 职场文书
Python爬虫之爬取最新更新的小说网站
2021/05/06 Python
Java 语言中Object 类和System 类详解
2021/07/07 Java/Android