每当我构建 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/