2011-08-22 28 views
5

Si utilizo el controlador $(document).ready() desde dentro de una función, ¿aún garantizará que el código dentro de él solo se ejecutará si el documento está listo, incluso si el evento listo para documentos ha ocurrido bien en el pasado?

Respuesta

14

Sí.

Desde la función jQuery readysource.

// Catch cases where $(document).ready() is called after the 
// browser event has already occurred. 
if (document.readyState === "complete") { 
    // Handle it asynchronously to allow scripts the opportunity to delay ready 
    return setTimeout(jQuery.ready, 1); 
} 
+1

+1 para el código fuente relevante. – alex

1

Sí. Puedes ponerlo dentro de una función y se disparará cada vez que llames a esa función.

4

Sí, eso es seguro. jQuery tiene varias formas de configurar manejadores como este, y el único "inseguro" es $(document).bind("ready", handler). From the jQuery docs:

Los tres de las siguientes sintaxis son equivalentes:

  1. $(document).ready(handler)
  2. $().ready(handler) (esto no es recomendable)
  3. $(handler)

También hay $(document).bind("ready", handler). Esto se comporta de manera similar al método listo pero con una excepción : Si el evento listo ya se ha activado e intenta .bind("ready"), no se ejecutará el controlador vinculado. Los manipuladores listos enlazados de esta manera se ejecutan después de cualquier límite de los otros tres métodos anterior.

Cuestiones relacionadas