2010-10-27 12 views
0

J'ai une fonction javascript qui appelle sur rappel, et je me demande comment enchaîner d'autres fonctions après tous les rappels sont terminés? Peut-être mieux expliqué par code:jQuery: chaînage des fonctions qui se callback eux-mêmes?

$(document).ready(function() { 
    sequentialFadeIn($('#demolist li')); 
}); 

function sequentialFadeIn(item) { 
    item.eq(0).fadeIn("fast", function() { 
     (item=item.slice(1)).length && sequentialFadeIn(item) 
    } 
} 

Ainsi, les itère de la fonction sequentialFadeIn par tous les éléments de la liste dans « demolist » et les fane dans un après l'autre. Ce que je voudrais faire est d'exécuter une autre fonction (appelons-la "sequentialMoveUp") après que toutes les itérations de sequentialFadeIn aient été exécutées. Je suis modérément nouveau pour jQuery, donc cette question pourrait bien être quelque chose comme "comment chaîner des méthodes non-jQuery dans jQuery" ou "comment lancer des callbacks sur des méthodes non-jquery dans jQuery" ... ou encore il ne peut pas . Toutes les idées les plus appréciées.

Répondre

1

Vous avez besoin d'un dernier rappel passé à sequentialFadeIn. La prochaine chose est d'ajouter un cas supplémentaire dans votre logique conditionnelle quand il n'y a plus d'objet. Ensuite, vous appelez le dernier rappel. [Demo]

code

function sequentialFadeIn(items, callback) { 
    items.eq(0).fadeIn("fast", function() { 
     items = items.slice(1); 
     if (items.length) // items left 
     sequentialFadeIn(items, callback); 
     else    // no items left -> finished 
     callback(); 
    }); 
} 

Utilisation

sequentialFadeIn($('#demolist li'), sequentialMoveUp); 
+0

parfait - exactement ce que je cherchais. Merci beaucoup. ;-) – PlankTon