当从Rails应用程序中的链接访问页面时,不调用jQuery文档就绪函数

时间:2015-03-04 04:53:31

标签: jquery ruby-on-rails turbolinks

我的shows.js.coffee中有一个coffeescript文件assets/javascripts folder。它包含用于在页面上切换两个div的复选框的代码。

如果我点击链接将我带到页面,jQuery永远不会被调用。两个div显示已加载,单击该复选框不会执行任何操作。

如果我在页面上,如果我点击重新加载,或者我只是在我的浏览器中转到localhost:3000/shows/new,则加载jQuery并隐藏div并选中复选框。

如果我关闭turbolinks问题就会消失。有没有什么我需要采取不同的方式进行turbolinks并仍然使我的jQuery工作?

这是我的shows.js.coffee

$('.shows.new').ready( ->
  $(document).ready( ->
    if(not $('#show_dinner_served').is(':checked'))
      console.log 'Checked'
      $('.dinner_starts').hide()
      $('.dinner_ends').hide()
  )

  $(document).ready( ->
    $('#show_dinner_served').click( ->
      $('.dinner_starts').toggle()
      $('.dinner_ends').toggle()
    )
  )
)

我的application.js

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

2 个答案:

答案 0 :(得分:0)

事实上,turbolinks打破了一些事件。详细描述了他们github page (Events)和一个众所周知的问题。尝试使用jquery-turbolinks gem。你可以找到它here

希望这有帮助。

答案 1 :(得分:0)

启用后,TurboLinked页面将无法完全加载,因此jqyery的document.ready()将无法正常工作。相反,turbolink提供了一个触发器,您可以使用它来代替文档就绪。

示例 -

$(document).on('ready page:load', function() {
    // CODE
});