【问题标题】:$(document).ready does not work in Rails$(document).ready 在 Rails 中不起作用
【发布时间】: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


【解决方案1】:

ready 是一个 jQuery 函数,因此请确保您在 Javascript 中正确使用和包含 jQuery 库。

此外,如果您不需要在控制器和 Javascript 之间交换数据,我建议您将 Javascript 放在资产文件夹中,例如:/app/assets/application.js。

这仅适用于 Rails 应用程序 3.x 和 4.x。

最好的问候。

【讨论】:

    猜你喜欢
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    相关资源
    最近更新 更多