3

我正在尝试创建一个循环来创建许多函数,以便当用户单击拇指向上按钮时,它会运行正确的 .php 文档。当我删除循环并只给出 var ia 特定数字时效果很好,但是一旦我尝试使其进入循环,在 alert(i) 处我在第一个循环中得到 10。

 var i=1;
 while ( ++i < 10 ) {
    $('#thumbup' + i).click(function() {
        var userid = $('#theuser' + i).text();
        var url = "_thumbup.php?userid=" + userid;
        //alert(url);

        $('#thumbup' + i).hide();
        $('#thumbdown' + i).hide();

        $("#toggle").css("display","block");
        alert(i); // Give me 10 on first loop?!?

        // get the URL
        http = new XMLHttpRequest(); 
        http.open("GET", url, true);
        http.send(null);

        // prevent form from submitting
        return false;   

    }); 
  }
4

2 回答 2

9

这是一个经典问题:当你的回调被调用时,i它的值是循环结束。

这是您可以解决的方法:

var i=1;
while ( ++i < 10 ) {
   (function(i){
      // your current code
   })(i);
}

它之所以起作用,是因为内部函数在调用时会创建一个范围,并且此范围包含i您想要的值。

于 2013-10-11T12:49:31.963 回答
2

您必须将 i 的值传递给您的回调。尝试这个:

var i=1;
 while ( ++i < 10 ) {
    (function(i){
      $('#thumbup' + i).click(function() {
        var userid = $('#theuser' + i).text();
        var url = "_thumbup.php?userid=" + userid;
        //alert(url);

        $('#thumbup' + i).hide();
        $('#thumbdown' + i).hide();

        $("#toggle").css("display","block");
        alert(i); // Give me 10 on first loop?!?

        // get the URL
        http = new XMLHttpRequest(); 
        http.open("GET", url, true);
        http.send(null);

        // prevent form from submitting
        return false;   

      }); 
    })(i);
  }
于 2013-10-11T12:52:37.407 回答