Quelles sont les différences entre window.onload
la $(document).ready()
méthode JavaScript et jQuery ?
$().ready()
fait window.onload
parfois se déclencher .
Quelles sont les différences entre window.onload
la $(document).ready()
méthode JavaScript et jQuery ?
$().ready()
fait window.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é.
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 fournit document.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 cas document.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.)load
événement de window
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
, non DOMContentReady
.
onload
(il existe des différences par rapport à FF / IE / Opera). Quant au DOMContentLoaded
, 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:
$( document ).ready(function() {
console.log( "ready!" );
});
Ou la version abrégée:
$(function() {
console.log( "ready!" );
});
Points principaux pour $(document).ready()
:
$
par jQuery
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 seule onload
fonction.
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ôt window.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()
$(document).ready(function() {
// Executes when the HTML document is loaded and the DOM is ready
alert("Document is ready");
});
// .load() method deprecated from jQuery 1.8 onward
$(window).on("load", function() {
// Executes when complete page is fully loaded, including
// all frames, objects and images
alert("Window is loaded");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
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)
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:
window.addEventListener('load', function () {
alert('Hello!')
})
window.addEventListener('load', function () {
alert('Bye!')
})
Code invalide:
window.onload = function () {
alert('Hello!') // it will not work!!!
}
window.onload = function () {
alert('Bye!')
}
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.
$(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.
$(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)
.
$.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équence
Il $(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:
jQuery.ready.promise = function( obj ) {
if ( !readyList ) {
readyList = jQuery.Deferred();
// Catch cases where $(document).ready() is called after the browser event has already occurred.
// we once tried to use readyState "interactive" here, but it caused issues like the one
// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
if ( document.readyState === "complete" ) {
// Handle it asynchronously to allow scripts the opportunity to delay ready
setTimeout( jQuery.ready );
// Standards-based browsers support DOMContentLoaded
} else if ( document.addEventListener ) {
// Use the handy event callback
document.addEventListener( "DOMContentLoaded", completed, false );
// A fallback to window.onload, that will always work
window.addEventListener( "load", completed, false );
// If IE event model is used
} else {
// Ensure firing before onload, maybe late but safe also for iframes
document.attachEvent( "onreadystatechange", completed );
// A fallback to window.onload, that will always work
window.attachEvent( "onload", completed );
// If IE and not a frame
// continually check to see if the document is ready
var top = false;
try {
top = window.frameElement == null && document.documentElement;
} catch(e) {}
if ( top && top.doScroll ) {
(function doScrollCheck() {
if ( !jQuery.isReady ) {
try {
// Use the trick by Diego Perini
// http://javascript.nwbox.com/IEContentLoaded/
top.doScroll("left");
} catch(e) {
return setTimeout( doScrollCheck, 50 );
}
// detach all dom ready events
detach();
// and execute any waiting functions
jQuery.ready();
}
})();
}
}
}
return readyList.promise( obj );
};
jQuery.fn.ready = function( fn ) {
// Add the callback
jQuery.ready.promise().done( fn );
return this;
};
J'ai également créé l'image ci-dessous comme référence rapide pour les deux:
window.onload: un événement JavaScript normal.
document.ready: un événement jQuery spécifique lorsque tout le code HTML a été chargé.
Une chose à retenir (ou devrais-je dire rappeler) est que vous ne pouvez pas empiler onload
comme vous le pouvez ready
. En d'autres termes, jQuery magic autorise plusieurs ready
s sur la même page, mais vous ne pouvez pas le faire avec onload
.
Le dernier onload
annulera tout article précédent onload
.
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 .
function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
}
else {
window.onload = function() {
if (oldonload) {
oldonload();
}
func();
}
}
}
// Example use:
addLoadEvent(nameOfSomeFunctionToRunOnPageLoad);
addLoadEvent(function() {
/* More code to run on page load */
});
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é.
$(document).ready(function() {
// Code to be executed
alert("Document is ready");
});
Le window.load
va cependant attendre que la page soit complètement chargée. Cela inclut les cadres intérieurs, les images, etc.
$(window).load(function() {
//Fires when the page is loaded completely
alert("window is loaded");
});
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, et window.onload
, vous pouvez terminer tout script qui nécessitait des ressources chargées, puis supprimer enfin le signe "Chargement ...".
Exemples :-
// document ready events
$(document).ready(function(){
alert("document is ready..");
})
// using JQuery
$(function(){
alert("document is ready..");
})
// window on load event
function myFunction(){
alert("window is loaded..");
}
window.onload = myFunction;
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.
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:
window.onload = function() {...}
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
.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.