为什么$(window).load()工作但不是$(document).ready()?

时间:2011-05-16 19:31:25

标签: javascript jquery ruby-on-rails document-ready

我正在使用rails 3应用程序,我想使用可排序列表。我正在使用显示here的方法。我的应用程序使用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 个答案:

答案 0 :(得分:2)

与正在注册的正文onready=回调存在冲突。请参阅jquery文档。您必须删除<body onload="initialize()">

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

另一种可能性是资源被非常缓慢地加载。然而,第一个更有可能。

加载资源时会触发

.ready。资源可能永远处于等待状态,因为服务器在将资源发送到浏览器时从不关闭套接字。使用firebug的网络监控工具来追踪是否是这种情况。

答案 1 :(得分:1)

解决方法怎么样?您是否知道SCRIPT标记末尾的BODY标记是在DOM加载之前的所有内容时执行的?

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