jQuery - выполнить функцию перед продолжением - PullRequest
1 голос
/ 24 октября 2011

Как я могу остановить выполнение функции, пока не будет выполнена другая функция?

$('#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 ]

2 голосов
/ 24 октября 2011
$('#div').load( 'sub.html', function(response, status) {

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

});
2 голосов
/ 24 октября 2011

Используйте метод обратного вызова.

Пожалуйста, обратитесь к JQuery API

1 голос
/ 24 октября 2011

Верните некоторое значение из вашего 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);

})()

Здесь setTimeout сработает только после завершения doStuff.

...