程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> web前端-JS for循環綁定事件問題以及閉包

web前端-JS for循環綁定事件問題以及閉包

編輯:編程解疑
JS for循環綁定事件問題以及閉包
 <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>for與onclick配合</title>
    <script type="text/javascript">
    window.onload=function(){
        var btn=document.getElementsByTagName("input");
         for(var i=0;i<btn.length;i++){
         btn[i].onclick=function(){
                alert(this.value);
           }    
    }
}
    </script>
</head>
<body>
<input type="button" value="for循環"/>
<input type="button" value="事件處理"/>
<input type="button" value="彈窗顯示"/>
</body>
</html>

這段程序在點擊了相應的按鈕後會顯示相應的value值。
但是為什麼把alert裡改成i後,不管點哪個都顯示3,而不是對應的0,1,2呢?
既然i值都是3,那是怎麼能正常顯示出對應的value的。

最佳回答:


this就是當前的button對象,直接alert i只能得到for循環後的,要做閉包指向當前執行到的i值

         window.onload = function () {
            var btn = document.getElementsByTagName("input");
            for (var i = 0; i < btn.length; i++) {
                btn[i].onclick = (function (i) {
                    return function () { alert(this.value+"|"+i); }
                })(i);
            }
        }
qq_23140091
showbo
showbo
qq_23140091
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved