2010-05-12 29 views
22

Cómo verificar si el documento está listo (todos los archivos js cargados, DOM está listo) a través de jQuery? ¿Hay alguna bandera?¿Cómo verificar si el documento está listo?

Enfrentando problemas si algunos de los archivos no se descargan por completo, y el evento es provocado por el usuario. Quiero verificar el controlador de eventos interno.

estoy usando jQuery, asp.net

+3

Esta es una de las primeras lecciones en el tutorial jQuery promedio. ¿Por ejemplo, leíste uno? Puede encontrar algunos [aquí] (http://docs.jquery.com/Tutorials). El [tutorial principal] (http://docs.jquery.com/Tutorials:How_jQuery_Works) maneja esto ya en el capítulo 2. – BalusC

+0

Sí, conozco la función Listo, pero ¿cómo verificar si DOM está Listo? – Lalit

+1

@Lalit: el DOM es '$ (documento)' en jQuery. – BalusC

Respuesta

26

Esto no está documentado, no creo, pero si nos fijamos en el código jQuery para $(document).ready:

// If the DOM is already ready 
if (jQuery.isReady) { 
    // Execute the function immediately 
    fn.call(document, jQuery); 
} // ... 

Así, por una manera que puede cambiar, puede utilizar $.isReady o jQuery.isReady.

Una mejor manera sería usar $(document).ready en línea. p.ej.:

function myClickHandler(event) { 
    // do stuff 

    $(document).ready(function() { 
    // Do this immediately if DOM is loaded, or once it's loaded otherwise. 
    } 
} 

Básicamente, esto utiliza la función de listo como protección. En lugar de una instrucción if, usa la función lista. Por supuesto, la función listada tiene el comportamiento que ejecutará una vez que se carga el DOM. Si su comportamiento solo quiere que suceda algo si está cargado, pero nunca lo hace si el DOM no está cargado todavía, entonces usar la bandera de arriba o establecer la suya es la mejor manera de hacerlo. El establecimiento de su propia:

$(document).ready(function() { 
    window.domIsReady = true; 
} 

if (window.domIsReady) { 
    // do stuff 
} 

La creación de su propia es probablemente mejor, ya que jQuery.isReady no parece ser documentada, y por lo tanto probablemente no es compatible y puede ser cambiado en cualquier momento.

+0

En su último ejemplo, ¿por qué no solo // hace cosas en el bloque $ (document) .ready? – Mathew

+1

Dijo específicamente que quería una bandera para controlar otro controlador de eventos. El error fue poner el if (window.domIsReady) independiente - el caso de uso presentado tendría eso en una función diferente. Perdón por no estar claro. –

5

¿Es esta una pregunta con trampa? :)

Lo que estamos buscando es document.ready

Ejemplo:

$(document).ready(function() { 

    alert ("document is ready!"); 

    }); 
+0

Realmente lo creo :) –

+1

Chicos, conozco la función Listo. Tengo otro controlador de evento de clic en el botón, solo quiero comprobar si todos los demás archivos js están cargados y el DOM está en estado preparado. – Lalit

+1

@Lalit Ya veo. No sé de una bandera de 'listo' para verificar, aunque no me sorprendería si hubiera una. Si no aparece nada, construiría una función '$ (document) .ready()' que establece una bandera en true: 'document_loaded' o algo así. Luego puedes verificar esa bandera. –

1

Jquery tiene esta:

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

Se ha convertido en práctica común para envolver cualquier jQuery que manipula la DOM en un bloque $ (documento) .ready(), para garantizar que el DOM esté todo allí antes de continuar.

+0

. Listo() no es lo que el OP está buscando. –

+1

Muy bien, ¡sígueme! ¿Quién rechazó solo MI respuesta a esto? ¡Para vergüenza! :) – Mathew

7
$(document).ready(function() { 
    // Handler for .ready() called. 
}); 
3

una llamada de función simple de ver si la base es aún cargado.

jQuery(document).ready(function(){ 
     alert("howdy"); 
    }); 

alternativa, averiguar si se carga (mejor)

<script type="text/javascript"> 
if (typeof jQuery == 'undefined') 
{ 
    alert('not loaded'); 
} 
</script> 

para el corto NUTS OUT THERE: (sin typeof necesaria :)

<script type="text/javascript"> 
    if(!this.$) 
    { 
     alert('not loaded'); 
    } 
    </script> 
0

pensó que el document.ready el código solo se activó cuando el documento y todos los archivos se cargaron. Nunca tuve problemas con eso yo mismo.

Si tuviera el problema, colocaría una var en todos los archivos necesarios y verificaría si suman, coloque todo el código en un archivo.

Perdóname por no publicar una respuesta definitiva

+0

No, document.ready se activa tan pronto como se carga el HTML DOM. onload se activa cuando todo lo demás (por ejemplo, imágenes) ha terminado. –

0

¿Está buscando el window.onload evento nativa, por casualidad? Se activa cuando se ha cargado todo en la página (incluidos scripts, imágenes, hojas de estilo).

function doStuff() { 
    alert("The DOM and everything inside have loaded"); 
} 
window.onload = doStuff; 

Ver también: addLoadEvent.

+0

ready! = Cargado, consulte [aquí] (http: // stackoverflow.com/questions/8396407/jquery-what-are-differences-between-document-ready-and-window-load) –

1

creo que lo que buscas es el:

$(window).load(function(){ 
    alert("All content has been downloaded to the web browser") 
    }); 

cual no hice un blog de no hace tanto tiempo:

0

Desde el jquery 1.8.x .ready() api page, parece que la unión de una función de controlador de eventos utilizando el siguiente sintaxis resuelve el problema:

$(document).ready(handler); 

se llamará la función de 'mango' , incluso si el evento 'listo' ya se activó.

Cuestiones relacionadas