jquery等待多个完整的事件

And*_*ndy 12 javascript jquery events jquery-ui

我想使用jQuery的load函数将一些内容加载到div中,我也想调用jQuery的animate函数.

$('#div1').load('...', function() {
    // load complete
});

$('html,body').animate({
    ...: ...}, ..., '...', function(){
    // animate complete
});
Run Code Online (Sandbox Code Playgroud)

我不想load在打电话之前等待完成,animate反之亦然.

在此之后我想调用第三个函数,但我不想把它直到两个完整的事件loadanimate被解雇.

我怎样才能做到这一点?

qer*_*rub 40

听起来像是一份工作Deferred:http://api.jquery.com/category/deferred-object/

var load = $.Deferred(function (dfd) {
  $('#div1').load(…, dfd.resolve);
}).promise();

var animate = $('html,body').animate(…);

$.when(load, animate).then(function () {
  // Do your thing here!
});
Run Code Online (Sandbox Code Playgroud)

  • 实际上,动画像延迟一样工作:http://bugs.jquery.com/ticket/7934.我不确定`.load`是如何工作的. (2认同)
  • 哇!我不知道!有趣的是,*jQuery集合本身*变成了延迟:http://jsfiddle.net/jgbUX/.**非常有意思.** (2认同)

Bum*_*2na 5

var _loadComplete = false;
var _animateComplete = false;

$('#div1').load('...', function() {
    // load complete
    _loadComplete = true;
    checkComplete(); 
});

$('html,body').animate({
    ...: ...}, ..., '...', function(){
    // animate complete
    _animateComplete = true;
    checkComplete();
});

function checkComplete() {
    if(_loadComplete && _animateComplete)
        runThirdFunction();
});
Run Code Online (Sandbox Code Playgroud)