30 votes

Ordre d'exécution du document jquery prêt

Supposons, j'ai un fichier js qui ressemble à ceci:

$(document).ready(function() { // first task} );
$(document).ready(function() { // second task } );
$(document).ready(function() { // third task } );

Après le chargement du fichier les tâches sont exécutées dans l'ordre. Je ne suis pas en mesure de comprendre pourquoi ? Je devine que les méthodes de rappel sont déclenchés lorsqu'un "sur" l'événement se produit. Comment est l'ordre d'exécution conservés ? Sont consécutifs rappels en cours de mise en file d'attente dans un certain endroit ?

Note: je sais que c'est un très naïf manière de coder. J'ai écrit l'extrait de code seulement pour obtenir mon point de vue et ne pas écrire un tel code dans mes projets.

31voto

Nick Craver Points 313913

Vos gestionnaires sont en train d'être poussé dans un tableau (readyList) pour l'exécution dans l'ordre plus tard, lorsque l' document est prêt.

Ils sont mis en file d'attente comme ceci:

readyList.push( fn );

Et exécuté lorsque le prêt comme ceci:

var fn, i = 0;
while ( (fn = readyList[ i++ ]) ) {
  fn.call( document, jQuery );
}

Si le document est déjà prêt, puis ils vont exécuter immédiatement, ce qui est encore dans l'ordre.

5voto

meder Points 81864

Les fonctions que vous spécifiez sont dans l'ordre ajoutées à une liste. Lorsque le DOM est prêt, jQuery parcourt cette liste et appelle les fonctions dans cet ordre.

Votre liste devient quelque chose comme ..

 handlers = [ function(){ alert('first') }, function() { alert('second')} ];
 

Puis une boucle parcourt ...

 for ( var i = 0, l = handlers.length; i<l; ++i ) {
    handlers.apply( document, arguments )
}
 

Et les fonctions sont appelées dans le contexte du document.

1voto

Francisco Lavin Points 129

Ce n'est pas mieux, mais à l'intérieur de $ (window) .load, vous pourriez avoir plus de contrôle. après $ (document) .ready

 $(window).load( fn );
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X