【发布时间】:2014-05-22 07:30:07
【问题描述】:
我在我的 Rails 应用程序中使用*.js.erb,它会对点击的链接做出反应。
但是当我通过link_to 渲染页面时,我必须刷新页面才能使其正常工作。有什么诀窍吗,我怎样才能做到这一点?
这是我的代码的一个非常简化的版本:
$(document).ready(function(){
$('#toright').click(alert(">> was clicked"));
});
$(document).ready(function(){
$('#toleft').click(alert("<< was clicked"));
});
$(document).ready(function(){
$('#save').click(alert("save was clicked"));
});
$(document).ready(function() {
alert("The document is ready!");
});
网站渲染后,它不显示我的功能,但是当我在地址栏中输入 URL 时,它可以工作。
一些编辑:
- 我使用的是 Rails 4.0.1
- 我的资产文件夹中有 js.erb
- 好的。我已将它们全部放在一个 $(document).ready 中,但我仍然需要重新加载我的文件才能使我的 JS 工作。
更新:
所以我编辑了我的 application.js 以包含
$(document).ready(function(){
alert("The document is ready!");
$('#toright').click(alert(">> was clicked"));
$('#toleft').click(alert("<< was clicked"));
$('#save').click(alert("save was clicked"));
});
并将我的 js.erb 放在我的 assets/javascripts 文件夹中。
但无论如何,在我刷新页面之前它不会起作用。
【问题讨论】:
-
你是否在视图页面中包含了javascript标签?
-
什么
Rails版本?使用turbo-links? -
您是否意识到可以将所有四行代码放在一个
$(document).ready()回调中?您不需要其中四个。 -
document.ready()与 Rails 配合得很好。如果您正在动态加载内容(例如使用 ajax 调用),则该内容可能会在document.ready()触发后加载,因此代码将在内容可用之前运行。您需要确保在加载任何动态内容或使用 delegated event handling 之后运行任何安装事件处理程序的代码。 -
这里的答案可能会有所帮助:stackoverflow.com/questions/18770517/…
标签: javascript jquery ruby-on-rails ruby