¿Por qué funciona $ (window) .load () pero no $ (document) .ready ()?

Estoy trabajando con una aplicación de rails 3 y quiero usar una lista ordenable. Estoy trabajando con el método mostrado aquí. Mi aplicación usa JQuery, y hay un archivo js incluido en el diseño de mi aplicación que llama $(document).ready() para configurar algunas cosas visuales. Eso parece estar funcionando bien.

Sin embargo, cuando intento llamar $(document).ready() en mi plantilla de vista a través de content_for :javascript para configurar la lista ordenable, ese código nunca se activa. Tengo el requisito yield :javascript llamo en mi archivo de diseño, y si cargo la página y miro la fuente, todo se ve bien. Sin embargo, el código nunca se ejecuta, es decir, esta instancia de $(document).ready() nunca dispara.

Acabo de descubrir que si reemplazo $(document).ready() con $(window).load() luego se ejecuta mi código js.

Así que mi pregunta es la siguiente: Por qué $(document).ready() fallar y $(window).load() ¿trabajo?

Código

Esto funciona:

<% content_for :javascript do %>

<script>
   $(window).load(function(){
     alert('it works!');
   });
</script>
<% end %>

Esto no funciona

<% content_for :javascript do %>

<script>
   $(document).ready(function(){
            alert('it works!');
   });
</script>
<% end %>

Aquí está el diseño

<!DOCTYPE html>
<html>
  <head>
    <title><%= content_for?(:title) ? yield(:title) : "Untitled" %></title>

    <!-- Reset Stylesheet -->
      <%= stylesheet_link_tag "reset" %>
        <!-- Main Stylesheet -->
      <%= stylesheet_link_tag "style" %>
        <!-- Invalid Stylesheet -->
      <%= stylesheet_link_tag "invalid" %>

        <%= javascript_include_tag :defaults, "nested_form", "DD_belatedPNG_0.0.7a", "simpla.jquery.configuration", "facebox", "jquery-ui.min" %>
        <%= yield :javascript %>

    <%= yield(:head) %>
    <%= csrf_meta_tag %>

  </head>
  <body onload="initialize()"><div id="body-wrapper">
…

preguntado el 16 de mayo de 11 a las 19:05

publica un código de ejemplo y te daré una magdalena. -

No creo que nadie pueda responder eso sin un código de ejemplo o más detalles. -

OK lo siento. Publicaré un código ... es tan simple que no estoy seguro de qué publicar. Donde sea que esté el problema, no creo que esté en la forma en que llamo a estas funciones o las incluyo en los archivos rails. -

¿Puede publicar su plantilla mostrando exactamente dónde está yield llamada es? -

¿Estás usando Safari para probar? Hay algunos casos extremos en los que document.ready no funciona correctamente con Safari. Ejemplo, si necesita manipular imágenes. De todos modos, es difícil saberlo porque su js está afectando #text_items pero no muestra esa área de su html. -

2 Respuestas

Hay un conflicto con el cuerpo onready= devolución de llamada registrada. Consulte los documentos de jquery. Debes quitar el <body onload="initialize()">.

http://api.jquery.com/ready/

También existe la posibilidad de que un recurso se cargue muy MUY lentamente. Sin embargo, el primero es más probable.

.ready se activa cuando se cargan los recursos. Es posible que un recurso esté permanentemente en estado de espera porque el servidor nunca cerró el socket cuando envió el recurso al navegador. Use la herramienta de monitoreo de red de Firebug para rastrear si este es el caso.

contestado el 18 de mayo de 11 a las 00:05

Gracias. Yo no lo sabía. Sin embargo, eliminar la llamada onload no lo solucionó. ready () ¡todavía no funciona! - CharlieMezak

@CharlieMezak Upvote si es útil;) También actualice su problema original con este detalle para futuras discusiones. Sin embargo, ¿ha utilizado firebug para asegurarse de que no haya un recurso muy lento o atascado? Es posible que su servidor no cierre el socket, solo se vacíe y, por lo tanto, .ready nunca se active. .ready espera a que los recursos terminen de cargarse, y un servidor no necesita cerrar un socket, por lo que puede causar una espera perpetua. - Dmitriy Likhten

¿Qué tal una solución alternativa? ¿Sabías que un SCRIPT etiqueta al final de la BODY etiqueta, se ejecuta cuando todo lo anterior se carga en el DOM ?

<body>
  <!-- all your HTML here -->
  <script>
    //your starting Javascript code here
  </script>
</body>

contestado el 17 de mayo de 11 a las 00:05

Bueno, ¿usar $ (window) .load () no es una solución alternativa? ¡Gracias por el consejo! - CharlieMezak

Gracias. Los golpearé, pero todavía espero algo de claridad sobre el tema principal. - CharlieMezak

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.