关于JS for循环问题~求解~~

<body>

    <button id="btn1">按钮1</button>
    <button id="btn2">按钮2</button>
    <button id="btn3">按钮3</button>
    <button id="btn4">按钮4</button>
    <button id="btn5">按钮5</button>
    <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
    <script type="text/javascript">
          for (var i = 1; i <=5; i++) {
              $("#btn"+i+"").click(function () {
            console.log(i);//点击任何按钮都是输出6~我想要的效果是点击按钮1输出1,点击按钮2输出2.........求解~~
            })
          }
    </script>
</body>

求教该如何改进代码~才能达到点击按钮1输出1,点击按钮2输出2....这种效果万分感谢

阅读 3.8k
7 个回答

开始用 let 声明变量吧

for (var i = 1; i <=5; i++) {

          (function(i){
                $("#btn"+i+"").click(function () {
                    console.log(i);
                })
          })(i)
      }

嗨呀 又是闭包问题

for (var i = 1; i <=5; i++) {
    
    (function(i){
        $('#btn' + i).click(function () {
            console.log(i);            
        });
    })(i);
    
}

又是闭包问题...

for (var i = 1; i <=5; i++) {
  (function(arg){
    $("#btn"+arg+"").click(function () {
    console.log(arg);//点击任何按钮都是输出6~我想要的效果是点击按钮1输出1,点击按钮2输出2.........求解~~
  });
  })(i); 
}

附上资料,理解原理比知道怎么写重要:
https://segmentfault.com/a/11...

<button data-ref="1">button1</button>
<button data-ref="2">button2</button>
<button data-ref="3">button3</button>
<button data-ref="4">button4</button>
<button data-ref="5">button5</button>
<button data-ref="6">button6</button>
<button data-ref="7">button7</button>
<button data-ref="8">button8</button>
<script type="text/javascript" src="http://cdn.bootcss.com/jquery/3.1.0/jquery.js"></script>
<script type="text/javascript">
  $("button").click(function(){
    console.log($(this).attr("data-ref"));
  })
</script>

贴上代码你看看

$('button').click(function(){

    alert($(this).index()+1);
})

因为console.log你点击才会触发, 而你点击前for已经执行完了, 所以i一定是取到的最终值.
最简单的方法是利用闭包, 把i作为参数传进去.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题