js循環綁定事件解決方案

相信你們都遇到過相似的問題,for循環綁定完事件最後執行的時候都是最後一個事件相同,好比這段代碼 
java

Java代碼  收藏代碼閉包

  1. <body>  spa

  2. <ul id="list">  blog

  3. <li>1</li>  事件

  4. <li>2</li>  ip

  5. <li>3</li>  get

  6. <li>4</li>  it

  7. <li>5</li>  io

  8. </ul>  for循環

  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>  


就是每一個循環加上閉包,而後設置一個臨時變量,問題解決。 

相關文章
相關標籤/搜索