2011-04-11 1 views
1

J'ai un problème avec mon code. En particulier je veux appeler séquentiellement 2 callback après l'événement keyup.JQuery démarre 2 rappels après le code

$('myDiv').keyup(function(){ 

function1 
function2 

}); 

Est-il possible attendre le chargement de la première fonction (en function1 il y a des demandes SQL, lignes annexant, etc.) avant le début de la prochaine fonction?

Réservoirs beaucoup

Répondre

1

Il y a deux solutions, en fonction de ce que les fonctions font.

  1. function1 ne contient pas d'appels asynchrones/code:
    Il suffit de mettre les déclarations après l'autre:

    function1(); 
    function2(); 
    
  2. function1 contient des appels/code asynchrone (je suppose que cela est votre cas)
    Ensuite, vous devez passer function2 comme rappel à function1 et l'appeler lorsque function1 gère la réponse:

    function1(function2); 
    

    function1 est par ex. comme:

    function function1(cb) { 
        $.ajax({ // asynchronous call 
         //... 
         success: function(data) { 
          // response handled here 
          cb(); // call the callback 
         } 
        }); 
    } 
    
+0

Réservoir vous tant! J'ai résolu mon problème avec votre deuxième solution. ;-) – Danilo

3

Mettre la deuxième fonction dans le premier de rappel de la méthode ajax, par exemple:

function first(cb) { 
    // request something. Passed in function will execute 
    // once the request has completed. 
    $("#foo").load('/foo', cb); 
} 

function second() { 
    // do something 
} 

$('myDiv').keyup(function(){ 
    first(second); 
}); 
0

Javascript est un seul thread, il n'évaluera function2 après function1 terminée. Cependant si vous faites un AJAX dans function1 ce ne sera pas le cas (AsynchronousJAX), vous voudriez contourner cela en mettant l'appel à function2 dans le gestionnaire de réponse de l'appel AJAX dans function1.

Questions connexes