378 votes

jQuery - plusieurs $(document).ready ... ?

Question :

Si je lie deux fichiers JavaScript, les deux avec $(document).ready fonctions, que se passe-t-il ? Est-ce que l'une écrase l'autre ? Ou est-ce que les deux $(document).ready être appelé ?

Par exemple,

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"></script>

<script type="text/javascript" src="http://.../jquery1.js"></script>

<script type="text/javascript" src="http://.../jquery2.js"></script>

jquery1.js :

$(document).ready(function(){
    $("#page-title").html("Document-ready was called!");
});

jquery2.js :

$(document).ready(function(){
    $("#page-subtitle").html("Document-ready was called!");
});

Je suis sûr que la meilleure pratique consiste à combiner les deux appels en un seul $(document).ready mais ce n'est pas tout à fait possible dans ma situation.

0 votes

368voto

Praveen Prasad Points 13137

Tous seront exécutés. et sur la base du premier appelé, premier exécuté !!

<div id="target"></div>

<script>
  $(document).ready(function(){
    jQuery('#target').append('target edit 1<br>');
  });
  $(document).ready(function(){
    jQuery('#target').append('target edit 2<br>');
  });
  $(document).ready(function(){
    jQuery('#target').append('target edit 3<br>');
  });
</script>

Démo Comme vous pouvez le constater, ils ne se remplacent pas l'un l'autre.

Il y a aussi une chose que je voudrais mentionner

à la place de ce

$(document).ready(function(){});

vous pouvez utiliser ce raccourci

jQuery(function(){
   //dom ready codes
});

66 votes

Ou encore plus court $(function() { // codes dom ready }) ; api.jquery.com/ready

225 votes

Vous vous souvenez d'avoir vu $(function() { // do stuff }) ; pour la première fois, et de la difficulté à trouver l'explication sur Google ? $(document).ready communique tellement plus pour si peu...

61 votes

Un vote pour un code laconique et moins lisible est un vote pour le terrorisme.

79voto

cjastram Points 436

Il est important de noter que chaque jQuery() doit effectivement retourner. Si une exception est levée lors d'un appel, les appels suivants (sans rapport) ne seront jamais exécutés.

Cela s'applique quelle que soit la syntaxe. Vous pouvez utiliser jQuery() , jQuery(function() {}) , $(document).ready() comme vous voulez, le comportement est le même. Si un premier bloc échoue, les blocs suivants ne seront jamais exécutés.

C'était un problème pour moi lorsque j'utilisais des bibliothèques tierces. Une bibliothèque lançait une exception, et les bibliothèques suivantes n'initialisaient jamais rien.

2 votes

Ceci. Je viens de passer une bonne heure à réduire un problème à ce point. Un de mes $(document).ready a déclenché une erreur et, par conséquent, une autre $(document).ready n'a jamais été appelée. Ça me rendait dingue.

12 votes

Ce n'est plus le cas. Depuis jQuery 3.0, jQuery garantit qu'une exception survenant dans un gestionnaire n'empêche pas l'exécution des gestionnaires ajoutés ultérieurement. api.jquery.com/ready

32voto

Ed Fryed Points 1128

$(document).ready() ; est la même chose que n'importe quelle autre fonction. Elle se déclenche une fois que le document est prêt, c'est-à-dire chargé. La question porte sur ce qui se passe lorsque plusieurs $(document).ready() sont déclenchés, et non lorsque vous déclenchez la même fonction dans plusieurs $(document).ready().

//this
<div id="target"></div>

$(document).ready(function(){
   jQuery('#target').append('target edit 1<br>');
});
$(document).ready(function(){
   jQuery('#target').append('target edit 2<br>');
});
$(document).ready(function(){
   jQuery('#target').append('target edit 3<br>');
});

//is the same as
<div id="target"></div>

$(document).ready(function(){

    jQuery('#target').append('target edit 1<br>');

    jQuery('#target').append('target edit 2<br>');

    jQuery('#target').append('target edit 3<br>');

});

les deux se comporteront exactement de la même manière. la seule différence est que, bien que le premier obtiendra les mêmes résultats, le second sera plus rapide d'une fraction de seconde et nécessitera moins de saisie :)

en conclusion, dans la mesure du possible, n'utilisez que 1 $(document).ready() ;

//ancienne réponse

Ils seront tous deux appelés dans l'ordre. La meilleure pratique serait de les combiner. Mais ne vous inquiétez pas si ce n'est pas possible, la page n'explosera pas.

0 votes

J'ai modifié le mien car je pensais que les gens pourraient confondre l'exécution de la même fonction plusieurs fois et l'exécution de différentes fonctions dans plusieurs $(document).ready's. J'espère que cela aidera.

21voto

Diodeus Points 67946

L'exécution se fait de haut en bas. Premier arrivé, premier servi.

Si la séquence d'exécution est importante, combinez-les.

10voto

Scoobler Points 6352

Les deux seront appelés, premier arrivé, premier servi. Jetez un coup d'œil aquí .

$(document).ready(function(){
    $("#page-title").html("Document-ready was called!");
  });

$(document).ready(function(){
    $("#page-title").html("Document-ready 2 was called!");
  });

Sortie :

Document-ready 2 a été appelé !

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