1. 程式人生 > >js迴圈繫結事件解決方案

js迴圈繫結事件解決方案

相信大家都遇到過類似的問題,for迴圈繫結完事件最後執行的時候都是最後一個事件相同,比如這段程式碼 
Java程式碼  收藏程式碼
  1. <body>  
  2. <ul id="list">  
  3. <li>1</li>  
  4. <li>2</li>  
  5. <li>3</li>  
  6. <li>4</li>  
  7. <li>5</li>  
  8. </ul>  
  9. <script>  
  10. var list_obj = document.getElementsByTagName('li'
    );  
  11. for (var i = 0; i <= list_obj.length; i++) {        
  12.   list_obj[i].onclick = function() {      
  13.     alert(i);      
  14.   }  
  15. }  
  16. </script>  
  17. </body>  

點選的時候彈出的不是0 1 2 3 4,而是5。 

解決方案也很多種,比如可以新建一個function設定一個私有方法,然後每次new一個object然後再繫結到它的方法上。 
還有就是閉包,寫法相對簡單: 
Java程式碼  收藏程式碼
  1. <body>  
  2. <ul id="list"
    >  
  3. <li>1</li>  
  4. <li>2</li>  
  5. <li>3</li>  
  6. <li>4</li>  
  7. <li>5</li>  
  8. </ul>  
  9. <script>  
  10. var list_obj = document.getElementsByTagName('li');  
  11. for (var i = 0; i <= list_obj.length; i++) {      
  12.   (function(){      
  13.     var p = i     
  14.     list_obj[i].onclick = function() {      
  15.       alert(p);      
  16.     }  
  17.   })();  
  18. }  
  19. </script>  
  20. </body>  

就是每個迴圈加上閉包,然後設定一個臨時變數,問題解決。