获取jquery的回调函数中的值

时间:2011-03-09 14:36:25

标签: javascript jquery closures

我正在使用jQuery animate方法,我想在动画完成时调用一个函数。由于函数在循环中被多次调用,我需要访问一些变量但不知道如何执行此操作(我猜测与闭包有关)。

我有:

while (i<numberofTimeIntervals)
{   
     // some calculations here
     xPos = initialPosX + x + "px";
     yPos = initialPosY - y + "px";

     $("#object").animate({left: xPos},10).animate({top: yPos},10, function(){ console.log(xPos) });  <-- what I want here is the access to xPos and yPos

     i = i + 1;
}

所以我需要在计算时访问xPos和yPos,因为稍后会调用回调。

JD。

5 个答案:

答案 0 :(得分:3)

使用第二个闭包:

while(i<numberofTimeIntervals)
{
    var xPos = initialPosX + x + "px";
    var yPos = initialPosY - y + "px";

    (function(xPos) {
        $('#object').animate({left: xPos},10).animate({top: yPos},10, function(){  console.log(xPos) });
    })(xPos);

    i++;
}

说明:JavaScript没有块范围,只是一个函数范围。所以你的回调函数的闭包保存变量(不是它的值)xPos。因此,在循环结束时,保存的变量(与循环变量相同)具有最终值。通过将调用包装在一个匿名函数中,该函数将变量作为参数传递,它现在被保存为一个新的变量,不再被修改。


顺便说一句,如果您可以访问JavaScript 1.7(不幸的是只有少数浏览器支持它),您也可以使用let xPos代替var xPos将其移动到块范围内。

答案 1 :(得分:1)

试试这个:

while (i<numberofTimeIntervals) {   

   //<!-- some calculations here--->

   (function(){
       var 
          xPos = initialPosX + x + "px",
          yPos = initialPosY - y + "px";

       $("#object")
          .animate({left: xPos},10)
          .animate({top: yPos},10, function(){  console.log(xPos) });  
       //<-- what I want here is the access to xPos and yPos

   })();

   i = i + 1;
}

答案 2 :(得分:0)

你有一个关闭。您应该已经可以访问这两个变量。你能发布确切的代码请求吗?

答案 3 :(得分:-1)

我让它以这种方式工作:http://jsfiddle.net/gailbear/WbNdx/6/

function printme(xpos){
    console.log(xpos);
}

while (i < numberofTimeIntervals) {

    var xPos = initialPosX + x + "px";
    var yPos = initialPosY - y + "px";

    $("#object").animate({
        left: xPos
    }, 10).animate({
        top: yPos
    }, 10, printme(xPos));

    i = i + 1;
}

我得到的第一个错误是“不要在循环中定义函数”。如果该代码有帮助,请告诉我。

答案 4 :(得分:-2)

您可以将它们定义为全局变量,意味着在任何函数或对象之外。然后你可以从任何地方访问它们。