Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Jquery循环工作不正常?_Javascript_Php_Jquery_Loops_While Loop - Fatal编程技术网

Javascript Jquery循环工作不正常?

Javascript Jquery循环工作不正常?,javascript,php,jquery,loops,while-loop,Javascript,Php,Jquery,Loops,While Loop,我试图创建一个循环来创建许多函数,这样当用户单击拇指向上按钮时,它就会运行正确的.php文档。当我移除循环并只给VARI一个特定的数字时,效果非常好,但一旦我尝试将其放入一个循环,在警报(I)时,我在第一个循环中得到10 var i=1; while ( ++i < 10 ) { $('#thumbup' + i).click(function() { var userid = $('#theuser' + i).text(); var url

我试图创建一个循环来创建许多函数,这样当用户单击拇指向上按钮时,它就会运行正确的.php文档。当我移除循环并只给VARI一个特定的数字时,效果非常好,但一旦我尝试将其放入一个循环,在警报(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;   

    }); 
  }
var i=1;
而(++i<10){
$(“#大拇指”+i)。单击(函数(){
var userid=$('#用户'+i).text();
var url=“\u thumbup.php?userid=“+userid;
//警报(url);
$('#拇指朝上'+i).hide();
$('#拇指向下'+i).hide();
$(“#切换”).css(“显示”、“块”);
警惕(我);//第一圈给我10分?!?
//获取URL
http=newXMLHttpRequest();
http.open(“GET”,url,true);
http.send(空);
//阻止表单提交
返回false;
}); 
}

这是一个经典问题:在调用回调时,
i
的值为循环结束

以下是您可以修复它的方法:

var i=1;
while ( ++i < 10 ) {
   (function(i){
      // your current code
   })(i);
}
var i=1;
而(++i<10){
(职能(一){
//您当前的代码
})(i) );
}

它之所以能够工作,是因为内部函数在调用时创建了一个作用域,并且该作用域包含所需的
i

必须将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);
  }
var i=1;
而(++i<10){
(职能(一){
$(“#大拇指”+i)。单击(函数(){
var userid=$('#用户'+i).text();
var url=“\u thumbup.php?userid=“+userid;
//警报(url);
$('#拇指朝上'+i).hide();
$('#拇指向下'+i).hide();
$(“#切换”).css(“显示”、“块”);
警惕(我);//第一圈给我10分?!?
//获取URL
http=newXMLHttpRequest();
http.open(“GET”,url,true);
http.send(空);
//阻止表单提交
返回false;
}); 
})(i) );
}

效果很好非常感谢,我通常不用问新问题就能找到答案,但这次无法找到,尽管这是一个非常简单的解决方案。谢谢。@Mikebaudin87我知道理解问题并不总是那么容易,尤其是在这里,一定很难知道要搜索什么。这就是我不想苛刻的原因(当我发现一个明显懒惰的问题时,我会非常严厉)。这正是我现在在项目中拥有的代码,谢谢你的确认。:)