6
votes

Quand devriez-vous n'utiliser pas $ (document) .Ready (fonction () pour les gestionnaires d'événements?

Je suis nouveau à JQuery et JavaScript et je voulais juste savoir, pourquoi ne voudriez-vous pas utiliser la fonction Ready () pour tous vos gestionnaires de votre événement?

ne pouvait pas exister de problèmes potentiels si un utilisateur envoie une entrée dans un événement de souris ou un événement de clavier avant que toute la page ait été rendue?


3 commentaires

Votre deuxième paragraphe l'obtient en arrière. C'est exactement quel document envisage de se produire.


Mon deuxième paragraphe fait référence à un script pas à l'aide de .Readady ()


Ensuite, vous devriez élargir et améliorer le formatage de votre question pour expliquer davantage. Une page correctement construite ne sera pas en mesure d'exécuter des événements ou une entrée de souris avant que le DOM ne soit chargé. Lorsque vous utilisez jQuery, documenter.Ready est essentiel pour faciliter cela.


5 Réponses :


3
votes

Je crois que vous devriez réellement utiliser le $ (document) .Ready () gestionnaire. La raison en est, si votre HTML ou votre DOM n'a pas encore été chargé, lorsque vous liez des événements à différents éléments, ils peuvent échouer en vertu de ne pas avoir été sur la page.

Je ne suis pas sûr de savoir qui ou qu'est-ce qui vous a dit de ne pas mettre les gestionnaires d'événements dans la fonction prête, mais je dirais que c'est une pratique assez courante.


0 commentaires

4
votes

Cela ne devrait jamais être le cas, le document JQuery Regardez les incendies lorsque le DOM a été chargé. Cela n'attend pas la page complète (les images incluses et similaires) à charger. Il serait extrêmement rare qu'un utilisateur puisse réagir à temps pour essayer de déclencher quelque chose avant que votre code soit exécuté. Lisez ceci: http://api.jquerery.com/ready/

Plus précisément, le premier paragraphe:

tandis que JavaScript fournit l'événement de charge pour exécuter le code lorsqu'un La page est rendue, cet événement n'est pas déclenché avant tous les actifs comme des images ont été complètement reçues. Dans la plupart des cas, le Le script peut être exécuté dès que la hiérarchie DOM a été pleinement construit. Le gestionnaire transmis à .ready () est garanti d'être exécuté après que le DOM soit prêt, c'est généralement le meilleur endroit pour Attachez tous les autres gestionnaires d'événements et exécutez un autre code JQuery.

donc en utilisant $ (document) .Ready (fonction (fonction () {}) ou l'équivalent $ (fonction () {}) est toujours une bonne pratique.

Edit: Pour vous assurer que l'utilisateur n'aura jamais de problèmes, assurez-vous que vos scripts sont tous hébergés à côté de votre site. Par exemple, JQuery a la possibilité d'utiliser un CDN. Les CDN sont gentils, mais si pour une raison quelconque, l'utilisateur peut accéder à votre site mais pas le CDN, il pourrait laisser votre page dans un état inutile.


1 commentaires

"Il serait extrêmement rare qu'un utilisateur puisse réagir à temps pour essayer de déclencher quelque chose avant que votre code soit exécuté." - Ce serait vraiment impossible. Le chargement d'image est garanti complet par le déclenchement de l'événement $ (fenêtre) .charger (), pas $ (document) .Readady. En outre, la question de savoir s'il faut utiliser CDN pour JQuery est loin d'être réglé et, en fait, les nombreuses préfèrent utiliser le CDN: Encosia.com/...



0
votes

C'est pourquoi la meilleure pratique consiste à envelopper le code entier à l'intérieur de la fonction Ready () code>.

$(document).ready(function(){
  //all event handlers here
});


1 commentaires

Si vous incluez la section JQuery.js dans la section , vous pouvez être sûr qu'il sera complètement chargé avant que l'une des pages ne soit rendue, sauf des problèmes qui empêchent d'être chargés du tout (par exemple, Si le fichier JS n'est introuvable sur le serveur).



1
votes

Il existe des circonstances dans lesquelles vous ne voulez pas ou ne pouvez pas attacher les gestionnaires d'événements sur prêts, car vous ne voulez que activer un événement après un autre événement ou parce que le contenu et les autres informations sont chargées via AJAX. Pour la plupart, la fonction prête est le bon endroit.


0 commentaires

0
votes

Ne pouvait-il pas avoir de problèmes potentiels si un utilisateur envoie une entrée dans un événement de souris ou un événement de clavier avant que toute la page ait été rendue? [Ce paragraphe] se réfère à un script n'utilise pas .Readady ()

En général, si vous souhaitez vous référer à un élément de JavaScript, l'élément en question doit avoir déjà été analysé, c'est-à-dire ajouté à l'arbre DOM. Ceci s'applique si vous essayez de joindre un gestionnaire d'événements (avec ou sans jQuery), modifiez ses paramètres CSS ou autre.

Le .Ready () gestionnaire n'attend pas Pour que toute la page soit rendue , il attend que la page soit "prête" pour la manipulation JS en ce sens qu'elle a été analysée et l'ensemble de l'arbre DOM a été construit. À ce moment-là, le rendu peut toujours se produire, par exemple, le contenu réel des éléments d'image pourrait toujours être uniquement partiellement téléchargé.

Cependant, il est possible de commencer à manipuler des éléments de JavaScript avant (ou sans) le .réady () tant que vous le faites dans un bloc de script inclus après l'élément (s) en question dans la source de la page, car Le navigateur fait son analyse de haut en bas de votre source HTML. Un exemple: xxx

Donc, si pour une raison quelconque, vous avez une fonctionnalité essentielle que vous sentez que vous devez absolument configurer avant . prêt () vous pouvez faire quelque chose comme ce qui précède.

Notez également que vous n'avez pas besoin de la fonction .Ready () du tout si vous incluez votre script au bas du corps, parce que (comme avec .Ready () ) à ce point, tous les éléments auront été analysés.

où vous do Besoin .Readady () est pour le code dans un fichier JS externe si vous ne pouvez pas être sûr où sur la page sera incluse. Si elle est incluse dans la section , il sera exécuté avant que le reste du document ne soit analysé, vous devez donc utiliser .Readady () . .


0 commentaires