Si un tercero archivo javascript cuelga y toma un poco en cargar, se¿Qué tan pronto se llamará a jQuery (documento)?
jQuery(document).ready(function() {})
tener que esperar a que se cargue antes de ser llamado?
Si un tercero archivo javascript cuelga y toma un poco en cargar, se¿Qué tan pronto se llamará a jQuery (documento)?
jQuery(document).ready(function() {})
tener que esperar a que se cargue antes de ser llamado?
sí, tiene que esperar. En particular, no puede confiar en que jQuery(document).ready()
se active antes de que otros scripts tengan la oportunidad de ejecutarse. ready
se enlaza a DOMContentReady, readystatechanged o onload, lo que esté disponible.
La documentación indica que "en la mayoría de los casos, el script se puede ejecutar tan pronto como la jerarquía DOM se haya construido por completo". Tenga en cuenta que la única garantía de es que el DOM está listo cuando se activa este evento. No le garantiza nada más, porque simplemente no puede.
Esto, por ejemplo, no funcionará en IE, Firefox o cromo, brilliant.js se siempre llama antes de que el controlador de ready()
tiene la oportunidad de ejecutar no importa cómo se barajan las etiquetas de script:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Test</title>
<script src="http://ajax.microsoft.com/ajax/jQuery/jquery-1.4.2.js" charset="utf-8" type="text/javascript" ></script>
</head>
<body>
<script type="text/javascript" >
// <![CDATA[
alert("attaching event");
$(document).ready(function() { alert("fired"); });
// ]]>
</script>
<script type="text/javascript" src="brilliant.js" ></script>
</body>
</html>
FYI, aquí está el código relevante de jQuery 1.4.2-: archivo
bindReady: function() {
if (readyBound) {
return;
}
readyBound = true;
// Catch cases where $(document).ready() is called after the
// browser event has already occurred.
if (document.readyState === "complete") {
return jQuery.ready();
}
// Mozilla, Opera and webkit nightlies currently support this event
if (document.addEventListener) {
// Use the handy event callback
document.addEventListener("DOMContentLoaded", DOMContentLoaded, false);
// A fallback to window.onload, that will always work
window.addEventListener("load", jQuery.ready, false);
// If IE event model is used
} else if (document.attachEvent) {
// ensure firing before onload,
// maybe late but safe also for iframes
document.attachEvent("onreadystatechange", DOMContentLoaded);
// A fallback to window.onload, that will always work
window.attachEvent("onload", jQuery.ready);
// If IE and not a frame
// continually check to see if the document is ready
var toplevel = false;
try {
toplevel = window.frameElement == null;
} catch(e) {}
if (document.documentElement.doScroll && toplevel) {
doScrollCheck();
}
}
},
Creo que $ (document) .ready() se ejecuta cuando el documento html se ha cargado y procesado. Lea la documentación para obtener más información
http://docs.jquery.com/Tutorials:Introducing_$(document).ready()
'listo()' se ejecuta cuando John Resig decide que debe ejecutar. Se puede ejecutar en diferentes navegadores o incluso en diferentes versiones del mismo navegador en diferentes momentos. No puede confiar en que active su controlador de eventos antes de que otros scripts tengan la oportunidad de ejecutarse. Lo único que puedes decir con certeza es que puedes llegar al DOM cuando se dispara. –
la tercera parte js puede estar bloqueando, sobre todo si está en la etiqueta de la cabeza. Intente ponerlo justo antes de la etiqueta de cierre <body>
.
Creo que la primera respuesta es incorrecta - document.ready no significa que todo el contenido debe cargarse, significa que el dom está completo. De lo contrario, los métodos jquery ejecutados dentro de esto no se ejecutarían hasta que se carguen todas las imágenes (por ejemplo), lo que no es cierto.
Editar
Parece que el comportamiento es diferente para las secuencias de comandos, pero puede ser específico del navegador. Hay una buena explicación aquí:
JavaScript: DOM load events, execution sequence, and $(document).ready()
Según la documentación de Mozilla para el evento "DOMContentLoaded", la diferencia clave entre "listo" y "cargar" es que la página no espera que las imágenes se carguen antes de llamar a "listo" (es decir, el controlador "DOMContentLoaded" cuando está en Firefox o Webkit). No dice nada sobre los archivos de script que se están realizando.Dado que estamos hablando de un modelo de subproceso único, no veo cómo se podría llamar a los controladores "listos" mientras el navegador todavía estaba analizando/ejecutando un bloque '
Por favor, comenten si deciden declinar. Gracias. –