javascript---浅析注册事件

原文网址为:http://item.feedsky.com/~feedsky/cssrain/~6110346/103912558/4218245/1/item.html 内容如下:

 

1. 首先是最常规的方法:

  1. <p id="para" title="cssrain demo!" οnclick="test()" >test</p>   
  2. <script>   
  3. function test()
  4. {   
  5.   alert("test");   
  6. }   
  7. </script>

2 .

当某一天,我们知道JavaScript要跟HTML结构实现分离后,就会改了一种写法:

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

3. 当我们工作越来越久后,有时候我们需要对某个元素绑定多个相同的事件类型:

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

4. 在一段时间内,你并没发现这段代码有任何错误。某一天,一个名叫firefox的浏览器 闯入你的视野,当我们把这段代码放到firefox中执行后,发现并不能正常运行。 问题就这样,越来越多,然而作为一名JS程序员,这些都是必须面对的。
     为了解决这段代码的平台兼容性问题,我翻翻手册,知道了firefox跟ie的区别:
firefox中注册事件使用:addEventListener方法,同时为了兼容ie,我们必须用到if ... else...

  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. {
  13.    var element = document.getElementById("para");
  14.    if(element.addEventListener)
  15.    {
  16.       //firefox 
  17.       element.addEventListener("click",test,false);
  18.       element.addEventListener("click",pig,false);
  19.    }
  20.    else
  21.    {
  22.        //IE
  23.        element.attachEvent("onclick",test);
  24.        element.attachEvent("onclick",pig);
  25.    }
  26. }
  27. </script>

5. 此时,代码就可以在多个平台上工作了。 但随着水平的进步,你不满足每次都去判断,你想把这个判断封装起来,以后可以直接调用:

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

至此,作为一个程序员的工作就完了。
中间我们从一个最传统,最基本的写法 , 然后实现Js和HTML的分离,然后又实现对同一个元素注册多个事件,期间,我们发现注册事件的兼容性问题。最后我们对注册事件的方法进行封装,方便以后使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值