252 votes

Peut-on avoir plusieurs $(document).ready(function(){ ... }) ; sections ?

Si j'ai beaucoup de fonctions au démarrage, doivent-elles toutes être regroupées dans un seul et même endroit ?

$(document).ready(function() {

ou puis-je avoir plusieurs déclarations de ce type ?

1 votes

Nécessaire principalement lorsque j'ai besoin de charger plusieurs fichiers js où chacun contient $(document).ready() ; fonction

0 votes

@leora cette question a été posée lors d'un entretien :D Merci

308voto

karim79 Points 178055

Vous pouvez en avoir plusieurs, mais ce n'est pas toujours la chose la plus soignée à faire. Essayez de ne pas en abuser, car cela affecterait sérieusement la lisibilité. Sinon, c'est parfaitement légal. Voir ci-dessous :

http://www.learningjquery.com/2006/09/multiple-document-ready

Essayez ceci :

$(document).ready(function() {
    alert('Hello Tom!');
});

$(document).ready(function() {
    alert('Hello Jeff!');
});

$(document).ready(function() {
    alert('Hello Dexter!');
});

Vous verrez que c'est équivalent à ceci, notez l'ordre d'exécution :

$(document).ready(function() {
    alert('Hello Tom!');
    alert('Hello Jeff!');
    alert('Hello Dexter!');
});

Il est également intéressant de noter qu'une fonction définie dans le cadre d'une $(document).ready ne peut être appelé à partir d'un autre bloc $(document).ready bloc, je viens de faire ce test :

$(document).ready(function() {
    alert('hello1');
    function saySomething() {
        alert('something');
    }
    saySomething();

});
$(document).ready(function() {
    alert('hello2');
    saySomething();
}); 

La sortie était :

hello1
something
hello2

26 votes

Il n'est pas judicieux de se fier à l'ordre d'exécution lorsque vous utilisez plusieurs instructions $(document).ready(). Chacune d'entre elles doit s'exécuter indépendamment de toute autre ayant déjà été exécutée ou non.

0 votes

@AoP - Je ne sais pas si cela a beaucoup de sens, s'ils ne sont pas exécutés dans l'ordre, alors ils sont complètement dénués de sens dans le contexte de l'application, donc utiliser plusieurs blocs $(document).ready( serait complètement cassé.

7 votes

@karim79 Il est certain que cette question (celle de l'OP) s'applique surtout à l'écriture d'un bout de code compliqué avec de multiples préoccupations de démarrage - c'est-à-dire un code qui est toujours s'exécutent lorsque le chargement est terminé, et d'autres qui ne sont nécessaires que sur certains nœuds de contenu ? Dans une telle situation, le contexte devrait être cloisonné, et l'ordre d'exécution devrait être sans importance - être capable d'assigner l'événement "DOM prêt" sans écraser le précédent devient une fonctionnalité utile, indépendamment du comportement d'ordonnancement.

18voto

Mickel Points 3923

Vous pouvez en utiliser plusieurs. Mais vous pouvez aussi utiliser plusieurs fonctions dans un seul document.ready :

$(document).ready(function() {
    // Jquery
    $('.hide').hide();
    $('.test').each(function() {
       $(this).fadeIn();
    });

    // Reqular JS
    function test(word) {
       alert(word);
    }
    test('hello!');
});

0 votes

Cela ne pose pas de problème si vous avez le contrôle total du code attaché à la page. Si quelqu'un a déjà écrit ce code dans un autre fichier joint à la page, vous pouvez le déclarer comme ceci.

0 votes

Je ne suis pas sûr de ce que vous essayez de dire. Mais si vous mettez cela dans votre tête, et que vous incluez 15 autres JS externes, qui contiennent tous un (ou plusieurs) document.load, cela fonctionnera toujours comme s'il n'y en avait qu'un seul. Il est important de mentionner que le scoop de chaque fonction/variable se termine par le crochet fermant de la fonction $(document).ready.

2 votes

J'essaie juste de dire que parfois, d'autres personnes auront écrit des modules attachés à la page qui ont une fonction document ready déjà déclarée, donc vous n'aurez peut-être pas le luxe de déplacer tout votre code dans une seule fonction (ce qui, bien sûr, serait idéal). Je me méfierais également d'avoir trop de choses ici cependant, car nous aurons un gonflement de la fonction Document Ready, ce qui peut rendre le code tout aussi difficile à maintenir.

15voto

pjesi Points 1286

Oui, vous pouvez facilement avoir plusieurs blocs. Faites simplement attention aux dépendances entre eux, car l'ordre d'évaluation pourrait ne pas correspondre à vos attentes.

10voto

JW. Points 386

Oui il est possible d'avoir plusieurs appels à $(document).ready(). Cependant, je ne pense pas que vous puissiez savoir de quelle manière ils seront exécutés. (source)

0 votes

Merci, il est bon de clarifier ce point, car, en dépit de la sagesse générale sur le sujet, l'objectif de l'UE est d'améliorer la qualité de vie de ses citoyens. Page jQuery ready() ne dit pas vraiment si vous pouvez le faire ou non (au moment de la rédaction :)). Il fait cependant une sorte de sous-entend c'est bon, si vous lisez entre les lignes d'une phrase : Ready handlers bound this way are executed after any bound by the other three methods above.

5voto

Oui, c'est possible, mais il est préférable d'utiliser un div #mydiv et d'utiliser les deux.

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

//and

$("#mydiv").ready(function(){});

2 votes

Idée intéressante, mais pourquoi est-ce mieux ?

3 votes

L'utilisation d'un div n'est pas prise en charge. Si, pour une raison quelconque, vous le faites, vous le faites à vos propres risques : La méthode .ready() ne peut être appelée que sur un objet jQuery correspondant au document actuel.

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