Почему $ (window) .load () работает, а не $ (document) .ready ()? - PullRequest
5 голосов
/ 16 мая 2011

Я работаю с приложением rails 3 и хочу использовать сортируемый список. Я работаю с методом, показанным здесь . Мое приложение использует JQuery, и в макет моего приложения включен файл js, который вызывает $(document).ready() для настройки некоторых визуальных элементов. Это, кажется, работает нормально.

Однако, когда я пытаюсь вызвать $(document).ready() в моем шаблоне представления через content_for :javascript, чтобы настроить сортируемый список, этот код никогда не запускается. У меня есть требуемый вызов yield :javascript в моем файле макета, и если я загружаю страницу и смотрю на источник, все выглядит хорошо. Код никогда не запускается, то есть этот экземпляр $(document).ready() никогда не срабатывает.

Я только что обнаружил, что если я заменю $(document).ready() на $(window).load(), тогда мой код js запустится.

Итак, мой вопрос: Почему $(document).ready() не работает и $(window).load() работает?

Код

Это работает:

<% content_for :javascript do %>

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

Это не работает

<% content_for :javascript do %>

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

Вот макет

<!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">
…

Ответы [ 2 ]

2 голосов
/ 17 мая 2011

Возник конфликт с зарегистрированным обратным вызовом onready= тела.Смотрите документы JQuery.Вы должны удалить <body onload="initialize()">.

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

Также возможно, что ресурс загружается ОЧЕНЬ медленно.Однако первый вариант более вероятен.

.ready запускается при загрузке ресурсов.Возможно, ресурс постоянно находится в состоянии ожидания, поскольку сервер никогда не закрывал сокет при отправке ресурса в браузер.Используйте инструмент сетевого мониторинга firebug, чтобы отследить, так ли это.

1 голос
/ 17 мая 2011

Как насчет обходного пути ... Знаете ли вы, что тег SCRIPT в конце тега BODY выполняется, когда все ранее загружено в DOM?

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