为什么$(document).ready()从未触发,但$(window).load()会触发?

4

我正在使用Rails 3.2.8,并运行jQuery v1.8.2。

以下方法有效:

$(window).load(function(){
alert('window load is working');
});

但这样做不起作用:

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

事实上,每当我在测试中切换$(document).ready()$(window).load()时,所有jQuery函数都会被触发,包括手风琴、可拖动元素等等。
以下是我的application.html.erb文件:
<!DOCTYPE html>
<html>
<head>
<title><%= full_title(yield(:title)) %></title>
<%= stylesheet_link_tag    "application", :media => "all" %>
<%= javascript_include_tag "application" %>
<%= csrf_meta_tags %>
</head>
<body background="<%= image_path(random_bg) %>">
<%= render 'layouts/header' %>

<div id="container">

<% flash.each do |key, value| %>
      <div class="alert alert-<%= key %>"><%= value %></div>
<% end %>

<%= yield %>
</div>
 <%= render 'layouts/footer' %>
</body>
</html>

The resulting html...

<html>
<head>
<title>Derp</title>
*bunch of css files*
<script src="/assets/jquery.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery_ujs.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery-ui.js?body=1" type="text/javascript"></script>
<script src="/assets/collections.js?body=1" type="text/javascript"></script>
<script src="/assets/global.js?body=1" type="text/javascript"></script>
<script src="/assets/derp.js?body=1" type="text/javascript"></script>
<script src="/assets/sessions.js?body=1" type="text/javascript"></script>
<script src="/assets/static_pages.js?body=1" type="text/javascript"></script>
<script src="/assets/test.js?body=1" type="text/javascript"></script>
<script src="/assets/users.js?body=1" type="text/javascript"></script>
<script src="/assets/application.js?body=1" type="text/javascript"></script>
....

我也查看了Stackoverflow,疯狂搜索了网络,并尝试了所有我能找到的解决方案:

  • 我已经尝试禁用本地jQuery并使用Google来托管jQuery
  • 我尝试调整放置javascript_include_tag的位置(将其移到样式表之上,在之前移动)
  • 我尝试在$(window).load()中包含$(document).ready()

但是$(document).ready()仍然不能触发... 在控制台中没有问题(在Chrome、Safari、Firefox上检查过)

一个类似的问题被问到这里,但他从未收到主要问题的答案。

为什么只有当我将$(document).ready()替换为$(window).load()时,jQuery才能正常工作?


1
你能发布生成的HTML吗?模板在这里并不太有用。 - Blender
完成!如果下面还需要其他内容,请告诉我。@Blender - Michelle
我建议你尝试移除除了核心jQuery.js之外的所有JS引用,看看是否能正常工作。如果可以,再逐个添加其他引用,直到出现问题为止... - nnnnnn
@nnnnnn 这很奇怪,但我刚刚删除了<%= javascript_include_tag "application" %>并用它在HTML中输出的内容进行了替换。现在,突然间它就可以工作了!当我把 <%= javascript_include_tag "application" %> 放回去时,它又失败了。但是,它输出的 HTML 是相同的... 你有什么想法?可能出了什么问题吗? - Michelle
1个回答

0

不好意思大家,我通过删除一些我写的糟糕的JavaScript代码解决了问题。这段代码原本是为了在不支持占位符的浏览器中显示标签。但是奇怪的是,一旦我删除了该文件,一切都恢复正常了……很奇怪,我总是花几个小时来尝试解决问题,在这里提问后似乎就可以很快地解决它们!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接