javascript - 为什么JS只在页面第一次加载或刷新时才加载?

标签 javascript ruby-on-rails ruby-on-rails-4

每当我构建 Rails 应用程序时,我都会遇到这个问题一段时间。基本上,每次加载应用程序时,如果您有某种 JavaScript 代码,无论是工具提示还是日期选择器,它只会在您第一次打开页面时或刷新页面时加载它

假设您决定访问服务页面,并且想要使用以下代码选择日期

$(document).ready ->
   $("[data-behaviour~=datepicker]").datepicker(
   todayBtn: "linked", 
   todayHighlight: true, 
   startDate: "(Time.current, :format => :datepicker)"
   format: "yyyy/mm/dd"
)

此代码将在首页加载时正常加载或直到页面刷新,但是如果您在页面之间来回切换,则由于某种原因,代码将无法加载。正如日期选择器在刷新页面之前不会再次出现一样。

这种情况在开发和生产中都会发生。有人知道怎么回事并愿意解释一下吗?我做错了什么吗?

不,代码不会放在 application.js 中,而是放在单独的 .js 文件中,然后通过我认为的 require 树从 application.js 调用。

最佳答案

这是由于 Turbolinks ajax 化了您的链接,因此 ready 事件仅在首页加载时触发。

TL;DR

您可以使用 $(document).on "page:change", -> 代替 $(document).ready ->

Turbolinks 的工作原理

Turbolinks 将一个点击处理程序附加到页面上的所有内容。如果您的浏览器支持 PushState,Turbolinks 将对页面发出 Ajax 请求,解析响应,并用响应替换整个页面。然后,它将使用 PushState 将 URL 更改为正确的 URL,保留刷新语义并为您提供漂亮的 URL

引用:http://guides.rubyonrails.org/working_with_javascript_in_rails.html

关于javascript - 为什么JS只在页面第一次加载或刷新时才加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25275435/

相关文章:

javascript - 无法使用 Ajax 检索 JSON

javascript - Ruby on Rails 嵌入按钮

variables - 如何声明可从 Rails 应用程序中的任何位置访问的变量?

ruby-on-rails-4 - 自定义字段设计

ruby-on-rails-4 - 删除具有重复迁移名称的迁移文件

javascript - 从导入的 HTML/JS 文件中提取变量

javascript - Telnet 在 JavaScript 中使用小程序

javascript - 单击选项卡更改标题的内容

mysql - Action Controller::Connection 在使用 mysql 在 ruby​​ on rails 中创建应用程序时未建立

ruby-on-rails - 使用 `:has_many :through` 记录关联处理复选框表单