attachEvent與addEventlistener兼容性


關於原生事件綁定中attachEvent與addEventlistener中兼容性以及attachEvent函數中this指代window有關問題

By odacash   at 2014-07-01   29 閱讀   0 回復   0.0 希賽幣
 
關於原生事件綁定中attachEvent與addEventlistener中兼容性以及attachEvent函數中this指代window問題

  在原生事件綁定中IE綁定中需要用到attachEvent,FF與chrome中需要用到addEventListener.

  attachEvent(事件,函數)

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

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

  alert('a');

  })

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

  alert('b');

  })

  addEventListener(事件,函數,false)

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

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

  alert('a');

  },false)

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

  alert('b');

  },false)

  上面大家可以看到運用事件綁定的時候,事件的區別 一個是用onclick 一個是用到click,所以FF與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');

  })

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

  alert('b');

  })

  但是函數中如果出現this的話

  例如:

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

  alert(this);

  })

  得到的結果是不一樣的 this在IE中彈出的window,在FF與chrome中指代的是當前對象

  如果要用到當前對象需要對函數進一步改造

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

  var oEvent = ev||event;

  var that=oEvent.srcElement||oEvent.target;

  alert(that)

  })




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM