2012-06-11 43 views
0

我有以下结构等待jQuery的动画完成,而无需使用回调

$('foo').click(function() { 
    var bool = false; 
    $('bar').animate(function() { 
     //bool = something 
    }); 

    return bool; 
}); 

但因为动画回调是异步,布尔从来没有正确设置。将return语句移入回调没有任何意义。我怎样才能让return语句等待动画完成?

+1

你能告诉我们你正在尝试做的?如果您可以提供一些背景信息,我们可以提供一种替代方法 –

+0

“将return语句移入回调没有任何意义。”为什么不? – j08691

+1

@ j08691 - 因为它返回的是匿名函数,而不是父函数 – mrtsherman

回答

2

这是不可能的,返回将立即发生—有没有办法推迟它。试着做它,而不是这样:

$('foo').click(function(e) { 
    e.preventDefault(); 
    var _this = this; 
    $('bar').animate(function() { 
     if (somecondition) { 
      window.location.href = _this.href; 
      // or submit the form, etc. 
     } 
    }); 
}); 
+0

不好的人。我希望在我的桌子上敲我的头之前,我已经问过了。 – mrtsherman

2

尝试像下面,

$('foo').click(function(e) { 
    e.preventDefault(); //prevent submission 

    var bool = false; 
    $('bar').animate(function() { 
     //bool = something 
     if (bool) { 
      //do what you wanted to do 
     } 
    }); 
});