我正在使用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">
…
答案 0 :(得分:2)
与正在注册的正文onready=
回调存在冲突。请参阅jquery文档。您必须删除<body onload="initialize()">
。
另一种可能性是资源被非常缓慢地加载。然而,第一个更有可能。
加载资源时会触发 .ready
。资源可能永远处于等待状态,因为服务器在将资源发送到浏览器时从不关闭套接字。使用firebug的网络监控工具来追踪是否是这种情况。
答案 1 :(得分:1)
解决方法怎么样?您是否知道SCRIPT
标记末尾的BODY
标记是在DOM
加载之前的所有内容时执行的?
<body>
<!-- all your HTML here -->
<script>
//your starting Javascript code here
</script>
</body>