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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值