js事件处理程序跨浏览器解决方案
来源: 阅读:599 次 日期:2016-07-15 16:25:50
温馨提示: 小编为您整理了“js事件处理程序跨浏览器解决方案”,方便广大网友查阅!

本文实例为大家分享了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事件处理程序跨浏览器有所帮助。

更多信息请查看网络编程
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:hfpxwx
咨询QQ:526150442(9:00—18:00)版权所有:
云南网警报警专用图标
Baidu
map