jQuery - 在继续之前执行函数

时间:2011-10-24 09:14:25

标签: jquery asynchronous

如何在另一个功能完成之前停止执行功能?

$('#div').load( 'sub.html', function() {

    //Do this once done loading the sub.html file
    setTimeout(function() { 

        //Run SomeFunction(); before doing anyhing else
        $('#tabsWrapper').removeClass('ajaxLoading');
        $('#tabsWrapper #loaderDiv').fadeIn(500);

    } , 1000);

});

我想确保在SomeFunction()等之前完成$('#tabsWrapper').removeClass('ajaxLoading');

任何建议如何实现?任何帮助非常感谢。

3 个答案:

答案 0 :(得分:2)

$('#div').load( 'sub.html', function(response, status) {

     if(status=="success"){
          //do your stuff here ..its loaded
  }

});

答案 1 :(得分:2)

使用回调方法。

请参阅JQuery API

答案 2 :(得分:1)

SomeFunction()返回一些值,并将其置于以下状态:

var result = null; // important to put it here eg before setTimeout

//Do this once done loading the sub.html file
setTimeout(function() { 

    result = SomeFunction();

    if (result === 'whatever that function returns') {
      $('#tabsWrapper').removeClass('ajaxLoading');
      $('#tabsWrapper #loaderDiv').fadeIn(500);
    }

} , 1000);

更好的方法是使用类似这样的自调用匿名函数:

(function foo(){
   doStuff;

   setTimeout(foo, 500);

})()

Here setTimeout will only trigger when doStuff is finished.