turbolinks:load 远程 true 调用未触发事件,rails,jquery
turbolinks:load event not firing on remote true call, rails, jquery
我在app/assets/javascripts/media_preview_script.js
中有一个简单的js文件
$(document).on('turbolinks:load', function() {
$("#cat").on('click', function() {
showBrowseInput()
})
})
function showBrowseInput () {
do stuff here
}
据说 turbolinks:load
使此脚本附加到第一个页面加载,然后任何 turbolinks 调用之后,但它不会这样做。它仅在页面加载时加载,然后不附加返回事件的任何 remote: true
调用。这与我的应用程序中的任何脚本都一样。
发生这种情况是因为开头的 $(document).on('turbolinks:load'...
,当我删除它时,如果我将文件包含在带有 <%= javascript_include_tag "file_name" %>
的视图表单中,我不会在文档和事件将附加每个 js 调用或页面加载。所以我的问题是,javascript_include_tag 是否添加了 turbolinks 功能?或者任何人都可以告诉我这里发生了什么。我正在使用 rails 5.
layouts/application.html.erb
<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
我认为问题在于 remote: true
使其与 ajax 一起工作。您可以使用此代码处理您想要的事件:
$('form').ajaxError(function(event, request, settings) {
// your code
})
$('form').bind('ajax:success', function(evt, data, status, xhr){
// your code
})
如
所述
更新:
我使用此解决方案遇到的唯一问题是 ajax:success 在页面完全刷新之前触发。我改为使用此代码:
$('form').bind('turbolinks:request-end', function(evt, data, status, xhr){
// your code
});
我在app/assets/javascripts/media_preview_script.js
$(document).on('turbolinks:load', function() {
$("#cat").on('click', function() {
showBrowseInput()
})
})
function showBrowseInput () {
do stuff here
}
据说 turbolinks:load
使此脚本附加到第一个页面加载,然后任何 turbolinks 调用之后,但它不会这样做。它仅在页面加载时加载,然后不附加返回事件的任何 remote: true
调用。这与我的应用程序中的任何脚本都一样。
发生这种情况是因为开头的 $(document).on('turbolinks:load'...
,当我删除它时,如果我将文件包含在带有 <%= javascript_include_tag "file_name" %>
的视图表单中,我不会在文档和事件将附加每个 js 调用或页面加载。所以我的问题是,javascript_include_tag 是否添加了 turbolinks 功能?或者任何人都可以告诉我这里发生了什么。我正在使用 rails 5.
layouts/application.html.erb
<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
我认为问题在于 remote: true
使其与 ajax 一起工作。您可以使用此代码处理您想要的事件:
$('form').ajaxError(function(event, request, settings) {
// your code
})
$('form').bind('ajax:success', function(evt, data, status, xhr){
// your code
})
如
所述更新:
我使用此解决方案遇到的唯一问题是 ajax:success 在页面完全刷新之前触发。我改为使用此代码:
$('form').bind('turbolinks:request-end', function(evt, data, status, xhr){
// your code
});