2010-11-03 5 views
0

J'ai une fonction de clic:Aide avec des fonctions jQuery exécution prématurément

jQuery("#element").click(function(e){ 

     var op = jQuery("#box").GetOp(); 
    op.flag1 = false; 
     op.flag2 = true; 
    executeFunction(); 
    jQuery("#box").reload(); 

}); 

Je veux que les fonctions executeFunction(); et jQuery ("# ​​case"). reload(); exécuter dans l'ordre de série seulement après que les deux lignes précédentes sont exécutées. EDIT: Les fonctions doivent s'exécuter de façon synchrone.

D'autres threads ont suggéré d'utiliser les rappels, mais je ne sais pas comment je peux l'utiliser dans mon cas.

Des suggestions?

Répondre

2

Javascript est intrinsèquement synchrone donc, si votre code ne s'exécute pas dans l'ordre de la série, peut-être executeFunction() appelle un comportement asynchrone, comme les requêtes AJAX ou setTimeout/setInterval choses.

Une solution dans ce cas es posible est de passer d'une fonction à executeFunction() et l'appeler lorsque le comportement async est fait:

jQuery('#element').click(function(e){ 
    var op = jQuery('#box').GetOp(); 
    op.flag1 = false; 
    op.flag2 = true; 
    executeFunction(function(){ 
     jQuery('#box').reload(); 
    }); 
}); 

Et changer executeFunction(fn) pour appeler la fonction sur la réussite du comportement async.

0

Normalement, JavaScript est une programmation à un seul thread. Mais vous pouvez simuler le thread en utilisant setTimeOut pour appeler automatiquement la fonction définie. Pour votre code source, il devrait fonctionner de manière synchrone si vous ne travaillez pas d'instruction setTimeOut dans une méthode.