【问题标题】:Jquery Loop not working correctly?Jquery 循环无法正常工作?
【发布时间】:2013-10-19 13:23:53
【问题描述】:

我正在尝试创建一个循环来创建许多函数,以便当用户单击大拇指按钮时,它会运行正确的 .php 文档。当我删除循环并只给 var i 一个特定的数字时,它工作得很好,但是一旦我尝试将它变成一个循环,在 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;   

    }); 
  }

【问题讨论】:

    标签: javascript php jquery loops while-loop


    【解决方案1】:

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

    以下是您可以解决的方法:

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

    之所以有效,是因为内部函数在调用时会创建一个作用域,而这个作用域包含你想要的i的值。

    【讨论】:

    • 效果很好,非常感谢,我通常不问新问题就能找到答案,但这次却找不到,尽管这是一个非常简单的解决方案。谢谢。
    • @MikeBeaudin87 我知道理解问题所在并不总是那么容易,尤其是在这里,一定很难知道要搜索什么。这就是为什么我不想苛刻(当我发现一个明显懒惰的问题时,我非常苛刻)。
    【解决方案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);
      }
    

    【讨论】:

    • 这是我现在项目中的确切代码,感谢您的确认。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-01
    • 2014-12-02
    • 2013-08-09
    • 2013-10-30
    相关资源
    最近更新 更多