js事件監聽器用法實例詳解

 

這篇文章主要介紹了js事件監聽器用法,以實例形式較爲詳細的分析了javascript事件監聽器使用注意事項與相關技巧,須要的朋友能夠參考下
本文實例講述了js事件監聽器用法。分享給你們供你們參考。具體分析以下:javascript


 

一、當同一個對象使用.onclick的寫法觸發多個方法的時候,後一個方法會把前一個方法覆蓋掉,也就是說,在對象的onclick事件發生時,只會執行最後綁定的方法。而用事件監聽則不會有覆蓋的現象,每一個綁定的事件都會被執行。以下:html

window.onload = function(){
  var btn = document.getElementById("yuanEvent");
  btn.onclick = function(){
    alert("第一個事件");
  }
  btn.onclick = function(){
    alert("第二個事件");
  }
  btn.onclick = function(){
    alert("第三個事件");
  }
}java

最後只輸出:第三個事件,由於後一個方法都把前一個方法覆蓋掉了。瀏覽器



原生態的事件綁定函數addEventListener:函數

var eventOne = function(){
  alert("第一個監聽事件");
}
function eventTwo(){
  alert("第二個監聽事件");
}
window.onload = function(){
  var btn = document.getElementById("yuanEvent");
  //addEventListener:綁定函數
  btn.addEventListener("click",eventOne);
  btn.addEventListener("click",eventTwo);
}測試

輸出:第一個監聽事件 和 第二個監聽事件ui


二、採用事件監聽給對象綁定方法後,能夠解除相應的綁定,寫法以下:.net

var eventOne = function(){
  alert("第一個監聽事件");
}
function eventTwo(){
  alert("第二個監聽事件");
}
window.onload = function(){
  var btn = document.getElementById("yuanEvent");
  btn.addEventListener("click",eventOne);
  btn.addEventListener("click",eventTwo);
  btn.removeEventListener("click",eventOne);
}htm

輸出:第二個監聽事件對象



三、解除綁定事件的時候必定要用函數的句柄,把整個函數寫上是沒法解除綁定的。
錯誤寫法:

btn.addEventListener("click",function(){
  alert(11);
});
btn.removeEventListener("click",function(){
  alert(11);
});

正確寫法:

btn.addEventListener("click",eventTwo);
btn.removeEventListener("click",eventOne);



總結:對函數進行封裝後的監聽事件以下,兼容各大主流瀏覽器。

/*
 * addEventListener:監聽Dom元素的事件
 * 
 * target:監聽對象
 * type:監聽函數類型,如click,mouseover
 * func:監聽函數
 */
function addEventHandler(target,type,func){
  if(target.addEventListener){
    //監聽IE9,谷歌和火狐
    target.addEventListener(type, func, false);
  }else if(target.attachEvent){
    target.attachEvent("on" + type, func);
  }else{
    target["on" + type] = func;
  } 
}
/*
 * removeEventHandler:移除Dom元素的事件
 * 
 * target:監聽對象
 * type:監聽函數類型,如click,mouseover
 * func:監聽函數
 */

function removeEventHandler(target, type, func) {
  if (target.removeEventListener){
    //監聽IE9,谷歌和火狐
    target.removeEventListener(type, func, false);
  } else if (target.detachEvent){
    target.detachEvent("on" + type, func);
  }else {
    delete target["on" + type];
  }
}
var eventOne = function(){
  alert("第一個監聽事件");
}
function eventTwo(){
  alert("第二個監聽事件");
}
window.onload = function(){
  var bindEventBtn = document.getElementById("bindEvent");
  //監聽eventOne事件
  addEventHandler(bindEventBtn,"click",eventOne);
  //監聽eventTwo事件
  addEventHandler(bindEventBtn,"click",eventTwo );
  //監聽自己的事件
  addEventHandler(bindEventBtn,"click",function(){
    alert("第三個監聽事件");
  });
  //取消第一個監聽事件
  removeEventHandler(bindEventBtn,"click",eventOne);
  //取消第二個監聽事件
  removeEventHandler(bindEventBtn,"click",eventTwo);
}


 

實例:

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Event</title>
    <script type="text/javascript">
      function addEventHandler(target,type,func){
        if(target.addEventListener){
          //監聽IE9,谷歌和火狐
          target.addEventListener(type, func, false);
        }else if(target.attachEvent){
          target.attachEvent("on" + type, func);
        }else{
          target["on" + type] = func;
        } 
      }
      function removeEventHandler(target, type, func) {
        if (target.removeEventListener){
          //監聽IE9,谷歌和火狐
          target.removeEventListener(type, func, false);
        } else if (target.detachEvent){
          target.detachEvent("on" + type, func);
        }else {
          delete target["on" + type];
        }
      }
      var eventOne = function(){
        alert("第一個監聽事件");
      }
      function eventTwo(){
        alert("第二個監聽事件");
      }
      window.onload = function(){
        var bindEventBtn = document.getElementById("bindEvent");
        //監聽eventOne事件
        addEventHandler(bindEventBtn,"click",eventOne);
        //監聽eventTwo事件
        addEventHandler(bindEventBtn,"click",eventTwo );
        //監聽自己的事件
        addEventHandler(bindEventBtn,"click",function(){
          alert("第三個監聽事件");
        });
        //取消第一個監聽事件
        removeEventHandler(bindEventBtn,"click",eventOne);
        //取消第二個監聽事件
        removeEventHandler(bindEventBtn,"click",eventTwo);
      }
    </script>
  </head>
  <body>
    <input type="button" value="測試" id="bindEvent">
    <input type="button" value="測試2" id="yuanEvent">
  </body>
</html>


轉自:http://www.jb51.net/article/67051.htm

相關文章
相關標籤/搜索