Javascript功能仅在页面刷新时触发

时间:2017-02-20 09:56:52

标签: ruby-on-rails ajax coffeescript ruby-on-rails-5 turbolinks

这在使用Ruby 2.3.1的Rails 5应用程序中发生。更改下拉列表时,我想通过ajax请求收集更多信息,以显示在下拉列表下方。此功能有效,但仅限于我加载或刷新页面。

应用程序/资产/ Javascript角/ articles.coffee

initGuideline = ->
  $('#article_theme_id').on 'change', (event) ->
    $.ajax
      url: "/themes/guideline",
      type: "GET",
      format: 'js',
      data: {
        theme_id: $("#article_theme_id").val()
      }
$(document).ready initGuideline
$(document).on 'ready page:load', initGuideline

下拉列表采用部分格式views/articles/_fields.html.slim,从views/articles/new.html.slimviews/articles/edit.html.slim调用。

的Gemfile

source 'https://rubygems.org'
gem 'rails', '~> 5.0.1'
gem 'sqlite3'
gem 'puma', '~> 3.0'
gem 'sass-rails', '~> 5.0'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.2'
gem 'jquery-rails'
gem 'turbolinks', '~> 5'
gem 'jbuilder', '~> 2.5'
gem 'bootstrap-sass'
gem 'devise'
gem 'slim'
gem 'pundit'
gem 'will_paginate'
and other gems..

资产/ Javascript角/ application.js中

//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require bootstrap-sprockets
//= require_tree .

刷新页面时,会显示并显示信息。但是,如果我离开页面并导航回来,则不再触发javascript函数。

通过下面提供的答案解决了上述问题。该行为是由Turbolinks引起的,解决方案是:

$(document).ready initGuideline
$(document).on 'ready turbolinks:load', initGuideline

3 个答案:

答案 0 :(得分:1)

由于涉及turbolinks,请尝试加载page:change而不是ready

OR

$(document).on 'ready turbolinks:change turbolinks:load'

答案 1 :(得分:1)

这应该适用于Rails 4,但对于Rails 5(使用turbolinks 5),您需要使用turbolinks:load而不是page:load

$(document).ready initGuideline
$(document).on 'ready turbolinks:load', initGuideline

请按this thread了解详情。

答案 2 :(得分:0)

其实你只需要:

$(document).on 'turbolinks:load', initGuideline

无需聆听准备,因为 turbolinks:load 已准备就绪