javascript---註冊事件

XML/HTML代碼
  1.  <p id="para" title="cssrain demo!" onclick="test()" >test</p>  
  2.  <script>  
  3.  function test(){  
  4.    alert("test");  
  5.  }  
  6. </script>
 

當某一天,我們知道JavaScript要跟HTML結構實現分離後,就會改了一種寫法:

XML/HTML代碼
 
  1.  <p id="para" title="cssrain demo!">test</p>  
  2.  <script>  
  3.  function test(){  
  4.    alert("test");  
  5.  }  
  6.  window.onload = function(){  
  7.      document.getElementById("para").onclick = test;  
  8.  }  
  9.  </script> 

當我們工作越來越久後,有時候我們需要對某個元素綁定多個相同的事件類型:

XML/HTML代碼
 
  1.  <p id="para" title="cssrain demo!">test</p>  
  2.  <script>  
  3.  function test(){  
  4.    alert("test");  
  5.  }  
  6.    
  7.  function pig(){  
  8.    alert("pig");  
  9.  }  
  10.    
  11.  window.onload = function(){  
  12.       document.getElementById("para").attachEvent("onclick",test);  
  13.       document.getElementById("para").attachEvent("onclick",pig);  
  14.  }  
  15.  </script> 

在一段時間內,你並沒發現這段代碼有任何錯誤。
某一天,一個名叫firefox的瀏覽器 闖入你的視野,當我們把這段代碼放到firefox中執行後,
發現並不能正常運行。 問題就這樣,越來越多,然而作爲一名JS程序員,這些都是必須面對的。

爲了解決這段代碼的平臺兼容性問題,我翻翻手冊,知道了firefox跟ie的區別:
firefox中註冊事件使用:addEventListener方法,同時爲了兼容ie,我們必須用到if ... else...

XML/HTML代碼

  1.    <p id="para" title="cssrain demo!">test</p>  
  2.    <script>  
  3.    function test(){  
  4.      alert("test");  
  5.    }  
  6.      
  7.    function pig(){  
  8.      alert("pig");  
  9.    }  
  10.      
  11.    window.onload = function(){  
  12.             var element =  document.getElementById("para");  
  13.             if(element.addEventListener){  // firefox  , w3c  
  14.                    element.addEventListener("click",test,false);  
  15.        element.addEventListener("click",pig,false);  
  16.             } else {   // ie  
  17.        element.attachEvent("onclick",test);  
  18.        element.attachEvent("onclick",pig);  
  19.             }  
  20.    }  
  21.    </script>  

此時,代碼就可以在多個平臺上工作了。

但隨着水平的進步,你不滿足每次都去判斷,你想把這個判斷封裝起來,以後可以直接調用:

XML/HTML代碼
  
  1.  <p id="para" title="cssrain demo!">test</p>  
  2.  <script>  
  3.  function test(){  
  4.    alert("test");  
  5.  }  
  6.    
  7.  function pig(){  
  8.    alert("pig");  
  9.  }  
  10.    
  11.  function addListener(element,e,fn){  
  12.       if(element.addEventListener){  
  13.            element.addEventListener(e,fn,false);  
  14.       } else {  
  15.            element.attachEvent("on" + e,fn);  
  16.       }  
  17.  }  
  18.    
  19.  window.onload = function(){  
  20.           var element =  document.getElementById("para");  
  21.           addListener(element,"click",test);  
  22.           addListener(element,"click",pig);  
  23.  }  
  24.  </script> 

XML/HTML代碼

  1.     <p id="para" title="cssrain demo!">test</p>  
  2.     <script>  
  3.     function test(){  
  4.       alert("test");  
  5.     }  
  6.       
  7.     function pig(){  
  8.       alert("pig");  
  9.     }  
  10.      
  11.    function addListener(element,e,fn){  
  12.         if(element.addEventListener){  
  13.              element.addEventListener(e,fn,false);  
  14.         } else {  
  15.              element.attachEvent("on" + e,fn);  
  16.         }  
  17.    }  
  18.      
  19.    window.onload = function(){  
  20.             var element =  document.getElementById("para");  
  21.             addListener(element,"click",test);  
  22.             addListener(element,"click",pig);  
  23.    }  
  24.    </script>  

 至此,作爲一個程序員的工作就完了。
中間我們從一個最傳統,最基本的寫法 , 然後實現Js和HTML的分離,然後又實現對同一個元素註冊多個事件,期間,我們發現註冊事件的兼容性問題。最後我們對註冊事件的方法進行封裝,方便以後使用。

———END——   come from http://www.neatcn.com/show-195-1.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章