zoukankan      html  css  js  c++  java
  • js中事件绑定attachEvent与addEventlistener的兼容性及this指向的统一

           在原生js中用到事件绑定时,要考虑到浏览器的兼容性。IE浏览器中为attachEvent,FireFox与chrome中用法为addEventListener,并且事件绑定中的this指向也不一样,用法如下:

      attachEvent(事件,函数)

      例:var oBtn = document.getElementById('button');

      oBtn.addachEvent('onclick',function(){

        alert('a');

      })

      addEventListener(事件,函数,false)

      例:var oBtn = document.getElementById('button');

      oBtn.addEventListener('click',function(){

        alert('a');

      },false)

      上面大家可以看到运用事件绑定的时候,事件的区别 一个是用onclick 一个是用click,所以FireFox与chrome中的事件是不带on的,而IE是必须带on

      由于兼容性的问题 需要封装函数

    function addEvent(obj,ev,fn){
    
      if(obj.attachEvent){    //针对IE浏览器
    
          obj.attachEvent('on'+ev,fn)
    
      }else{    //针对FF与chrome
    
          obj.addEventListener(ev,fn,false)
    
      }
    
    }

      所以上述的实例可以改写成

      addEvent(oBtn,'click',function(){

        alert('a');

      })

      考虑到函数中如果使用this,例如:

      addEvent(oBtn,'click',function(){

        alert(this);

      })

      得到的结果是不一样的 this在IE中弹出的window,在FireFox与chrome中指代的是当前对象

      如果要统一this指向当前对象,调用函数addEvent需要统一this指向,如下:

    addEvent(oBtn,'click',function(ev){
    
      var oEvent = ev||event;
    
      var that=oEvent.srcElement||oEvent.target;
    
      alert(that)
    
    })
  • 相关阅读:
    Nginx流量拷贝
    Nginx基于站点目录和文件的URL访问控制
    Nginx禁止ip访问或非法域名访问
    Nginx动静分离
    Nginx隐藏式跳转(浏览器URL跳转后保持不变)
    Harbor镜像仓库(含clair镜像扫描)
    Pod的QoS服务质量等级
    Pod容器应用"优雅发布"
    Pod容器自动伸缩(HPA) 测试
    NFS双机热备高可用环境
  • 原文地址:https://www.cnblogs.com/toggle/p/9365643.html
Copyright © 2011-2022 走看看