Quelles sont les différences entre window.onload
la $(document).ready()
méthode JavaScript et jQuery ?
javascript
jquery
dom-events
unobtrusive-javascript
Vaibhav Jain
la source
la source
$().ready()
faitwindow.onload
parfois se déclencher .Réponses:
L'
ready
événement se produit après le chargement du document HTML, tandis que l'onload
événement se produit plus tard, lorsque tout le contenu (par exemple, les images) a également été chargé.L'
onload
événement est un événement standard dans le DOM, tandis que l'ready
événement est spécifique à jQuery. Le but de l'ready
événement est qu'il se produise le plus tôt possible après le chargement du document, afin que le code qui ajoute des fonctionnalités aux éléments de la page n'ait pas à attendre que tout le contenu soit chargé.la source
ready
événement est spécifique à jQuery. Il utilise l'DOMContentLoaded
événement s'il est disponible dans le navigateur, sinon il l'émule. Il n'y a pas d'équivalent exact dans le DOM car l'DOMContentLoaded
événement n'est pas pris en charge dans tous les navigateurs.onload
.onload
est le nom d'une propriété d'objet qui stocke une fonction à appeler lorsque l'load
événement est déclenché.window.onload
est l'événement JavaScript intégré, mais comme son implémentation avait de subtiles bizarreries sur tous les navigateurs (Firefox, Internet Explorer 6, Internet Explorer 8 et Opera ), jQuery fournitdocument.ready
, qui les résume et se déclenche dès que le DOM de la page est prêt (n'attend pas les images, etc.).$(document).ready
(notez que ce n'est pas le casdocument.ready
, ce qui n'est pas défini) est une fonction jQuery, encapsulant et fournissant une cohérence aux événements suivants:document.ondomcontentready
/document.ondomcontentloaded
- un nouvel événement qui se déclenche lorsque le DOM du document est chargé (ce qui peut prendre un certain temps avant le chargement des images, etc.); encore une fois, légèrement différent dans Internet Explorer et dans le reste du mondewindow.onload
(qui est implémenté même dans les anciens navigateurs), qui se déclenche lorsque la page entière se charge (images, styles, etc.)la source
load
événement dewindow
est implémenté de manière raisonnablement cohérente entre les navigateurs. Le problème que jQuery et d'autres bibliothèques tentent de résoudre est celui que vous avez mentionné, à savoir que l'load
événement n'est pas déclenché tant que toutes les ressources dépendantes telles que les images et les feuilles de style n'ont pas été chargées, ce qui peut être long après le chargement complet du DOM, rendu et prêt pour l'interaction. L'événement qui se déclenche dans la plupart des navigateurs lorsque le DOM est prêt est appeléDOMContentLoaded
, nonDOMContentReady
.onload
(il existe des différences par rapport à FF / IE / Opera). Quant auDOMContentLoaded
, vous avez tout à fait raison. Modification pour clarifier.document.onload
était utilisable). En ce qui concerne le window.onload:window.onload = fn1;window.onload=fn2;
- seul fn2 serait invoqué onload. Certains hébergeurs gratuits insèrent leur propre code dans les documents, et cela a parfois gêné le code de la page.$(document).ready()
est un événement jQuery. La$(document).ready()
méthode de JQuery est appelée dès que le DOM est prêt (ce qui signifie que le navigateur a analysé le HTML et construit l'arborescence DOM). Cela vous permet d'exécuter du code dès que le document est prêt à être manipulé.Par exemple, si un navigateur prend en charge l'événement DOMContentLoaded (comme le font de nombreux navigateurs non IE), il se déclenchera sur cet événement. (Notez que l'événement DOMContentLoaded a été ajouté uniquement à IE dans IE9 +.)
Deux syntaxes peuvent être utilisées pour cela:
Ou la version abrégée:
Points principaux pour
$(document).ready()
:$
parjQuery
lorsque vous recevez «$ n'est pas défini».$(window).load()
plutôt.window.onload()
est une fonction JavaScript native. L'window.onload()
événement se déclenche lorsque tout le contenu de votre page est chargé, y compris le DOM (modèle d'objet de document), les bannières publicitaires et les images. Une autre différence entre les deux est que, bien que nous puissions avoir plus d'une$(document).ready()
fonction, nous ne pouvons avoir qu'une seuleonload
fonction.la source
Un événement de chargement Windows se déclenche lorsque tout le contenu de votre page est entièrement chargé, y compris le contenu DOM (modèle d'objet de document) et JavaScript asynchrone , les cadres et les images . Vous pouvez également utiliser body onload =. Les deux sont identiques;
window.onload = function(){}
et<body onload="func();">
sont différentes façons d'utiliser le même événement.L'
$document.ready
événement de fonction jQuery s'exécute un peu plus tôtwindow.onload
et est appelé une fois que le DOM (modèle d'objet Document) est chargé sur votre page. Il n'attendra pas que les images, les cadres soient complètement chargés .Tiré de l'article suivant: comment
$document.ready()
est différent dewindow.onload()
la source
la source
Un mot d'avertissement sur l'utilisation
$(document).ready()
avec Internet Explorer. Si une requête HTTP est interrompue avant le chargement de l'intégralité du document (par exemple, lorsqu'une page est diffusée en continu vers le navigateur, un autre lien est cliqué), IE déclenchera la$(document).ready
événement.Si un code de l'
$(document).ready()
événement fait référence à des objets DOM, il est possible que ces objets ne soient pas trouvés et des erreurs Javascript peuvent se produire. Soit gardez vos références à ces objets, soit différez le code qui référence ces objets à l'événement window.load.Je n'ai pas pu reproduire ce problème dans d'autres navigateurs (spécifiquement, Chrome et Firefox)
la source
Un petit conseil:
Utilisez toujours le
window.addEventListener
pour ajouter un événement à la fenêtre. Parce que de cette façon, vous pouvez exécuter le code dans différents gestionnaires d'événements.Code correct:
Code invalide:
En effet, onload n'est que la propriété de l'objet, qui est écrasé.
Par analogie avec
addEventListener
, il est préférable d'utiliser$(document).ready()
plutôt que de charger.la source
Événements
$(document).on('ready', handler)
se lie à l'événement ready de jQuery. Le gestionnaire est appelé lorsque le DOM est chargé . Des éléments comme des images manquent peut-être encore . Il ne sera jamais appelé si le document est prêt au moment de la reliure. jQuery utilise DOMContentLoaded -Event pour cela, en l'émulant s'il n'est pas disponible.$(document).on('load', handler)
est un événement qui sera déclenché une fois que toutes les ressources seront chargées à partir du serveur. Les images sont chargées maintenant. Bien que l' onload soit un événement HTML brut, ready est construit par jQuery.Les fonctions
$(document).ready(handler)
est en fait une promesse . Le gestionnaire sera appelé immédiatement si le document est prêt au moment de l'appel. Sinon, il se lie àready
-Event.Avant jQuery 1.8 ,
$(document).load(handler)
existait comme alias de$(document).on('load',handler)
.Lectures complémentaires
la source
$.fn.load
car cela ne se comporte plus comme un classeur d'événements. En fait, il est obsolète depuis jquery 1.8. Je l'ai mis à jour en conséquenceIl
$(document).ready()
s'agit d'un événement jQuery qui se produit lorsque le document HTML a été entièrement chargé, tandis que l'window.onload
événement se produit plus tard, lorsque tout, y compris les images de la page, est chargé.Window.onload est également un événement javascript pur dans le DOM, tandis que l'
$(document).ready()
événement est une méthode dans jQuery.$(document).ready()
est généralement le wrapper de jQuery pour s'assurer que tous les éléments chargés sont utilisés dans jQuery ...Regardez le code source de jQuery pour comprendre comment cela fonctionne:
J'ai également créé l'image ci-dessous comme référence rapide pour les deux:
la source
window.onload: un événement JavaScript normal.
document.ready: un événement jQuery spécifique lorsque tout le code HTML a été chargé.
la source
Une chose à retenir (ou devrais-je dire rappeler) est que vous ne pouvez pas empiler
onload
comme vous le pouvezready
. En d'autres termes, jQuery magic autorise plusieursready
s sur la même page, mais vous ne pouvez pas le faire aveconload
.Le dernier
onload
annulera tout article précédentonload
.Une bonne façon de gérer cela est d' utiliser une fonction apparemment écrite par un Simon Willison et décrite dans Utilisation de plusieurs fonctions de chargement JavaScript .
la source
Document.ready
(un événement jQuery) se déclenche lorsque tous les éléments sont en place, et ils peuvent être référencés dans le code JavaScript, mais le contenu n'est pas nécessairement chargé.Document.ready
s'exécute lorsque le document HTML est chargé.Le
window.load
va cependant attendre que la page soit complètement chargée. Cela inclut les cadres intérieurs, les images, etc.la source
L'événement document.ready se produit lorsque le document HTML a été chargé, et l'
window.onload
événement se produit toujours plus tard, lorsque tout le contenu (images, etc.) a été chargé.Vous pouvez utiliser l'
document.ready
événement si vous souhaitez intervenir "tôt" dans le processus de rendu, sans attendre le chargement des images. Si vous avez besoin que les images (ou tout autre "contenu") soient prêtes avant que votre script "fasse quelque chose", vous devez attendrewindow.onload
.Par exemple, si vous implémentez un modèle de "diaporama" et que vous devez effectuer des calculs en fonction de la taille des images, vous souhaiterez peut-être attendre
window.onload
. Sinon, vous pourriez rencontrer des problèmes aléatoires, selon la vitesse de chargement des images. Votre script s'exécuterait simultanément avec le thread qui charge les images. Si votre script est suffisamment long ou que le serveur est assez rapide, vous ne remarquerez peut-être pas de problème si les images arrivent à temps. Mais la pratique la plus sûre serait de permettre le chargement des images.document.ready
pourrait être un bon événement pour vous de montrer un signe "chargement ..." aux utilisateurs, etwindow.onload
, vous pouvez terminer tout script qui nécessitait des ressources chargées, puis supprimer enfin le signe "Chargement ...".Exemples :-
la source
window.onload
est une fonction intégrée à JavaScript.window.onload
déclencher lorsque la page HTML est chargée.window.onload
ne peut être écrit qu'une seule fois.document.ready
est une fonction de la bibliothèque jQuery.document.ready
se déclenche lorsque le HTML et tout le code JavaScript, CSS et les images inclus dans le fichier HTML sont complètement chargés.document.ready
peut être écrit plusieurs fois selon les besoins.la source
Quand vous dites
$(document).ready(f)
, vous dites au moteur de script de faire ce qui suit:$
et sélectionnez-le, car il n'est pas de portée locale, il doit effectuer une recherche de table de hachage, qui peut ou non avoir des collisions.ready
de l'objet sélectionné, qui implique une autre recherche de table de hachage dans l'objet sélectionné pour trouver la méthode et l'invoquer.Dans le meilleur des cas, il s'agit de 2 recherches de table de hachage, mais cela ignore le lourd travail effectué par jQuery, où
$
trouve l'évier de cuisine de toutes les entrées possibles de jQuery, donc une autre carte est susceptible de distribuer la requête au gestionnaire correct.Alternativement, vous pouvez faire ceci:
Qui va
onload
s'agit d'une propriété ou non en faisant une recherche de table de hachage, car elle l'est, elle est appelée comme une fonction.Dans le meilleur des cas, cela coûte une seule recherche de table de hachage, ce qui est nécessaire car
onload
doit être récupéré.Idéalement, jQuery compilerait leurs requêtes en chaînes qui peuvent être collées pour faire ce que vous vouliez que jQuery fasse mais sans la distribution d'exécution de jQuery. De cette façon, vous avez le choix entre
eval
.la source
window.onload est fourni par l'api DOM et il dit "l'événement de chargement se déclenche lorsqu'une ressource donnée a été chargée".
"L'événement de chargement se déclenche à la fin du processus de chargement du document. À ce stade, tous les objets du document se trouvent dans le DOM, et toutes les images, scripts, liens et sous-cadres ont fini de se charger." Charge DOM
Mais dans jQuery $ (document) .ready () ne s'exécutera que lorsque la page Document Object Model (DOM) sera prête pour l'exécution du code JavaScript. Cela ne comprend pas les images, scripts, etc. iframes jquery événement prêt
La méthode jquery ready s'exécutera donc plus tôt que l'événement dom onload.
la source