Coffeescript JQuery点击仅在页面刷新时工作

时间:2013-11-27 20:31:01

标签: jquery coffeescript ruby-on-rails-4

我有一个使用coffeescript的rails应用程序。当我刷新页面或使用URL直接转到页面时,以下代码可以正常工作。当我点击链接进入此页面并尝试它时,它根本不起作用。为什么会这样?

jQuery ->
  console.log "Ready."
  $('form').on 'click', '.add_fields', (event) ->
    console.log "Click."
    time = new Date().getTime()
    regexp = new RegExp($(this).data('id'), 'g')
    $(this).before($(this).data('fields').replace(regexp, time))
    event.preventDefault()

重新加载后,我会在适当的时候准备好并点击,然后就可以了。从另一页面点击后,我什么都没得到。我也从chrome获得了这个弃用警告,我不确定如何解决,因为它来自JQuery本身:

event.returnValue is deprecated. Please use the standard event.preventDefault() instead.
jquery.js?body=1:5375

只有上述代码无效时才会显示错误。镀铬会阻挡它吗?我正在使用jquery-rails (3.0.4)

2 个答案:

答案 0 :(得分:6)

事实证明,导致问题的是turbolinks。感谢davidburber指出这一点。以下是我采取的措施(来自Rails 4: how to use $(document).ready() with turbo-links

ready = ->
  $('form').on 'click', '.remove_fields', (event) ->
    $(this).prev('input[type=hidden]').val('1')
    $(this).closest('fieldset').hide()
    event.preventDefault()


$(document).ready(ready)
$(document).on('page:load', ready)

答案 1 :(得分:4)

这里还有另一个更强大的简单解决方案。

当你使用turbolinks时,这是Rails 4以来的默认值,也包括[jquery.turbolinks gem] [1]

说明很简单。

  1. 在您的Gemfile中添加: gem' jquery-turbolinks'
  2. 在您的JavaScript清单中(默认:app / assets / javascripts / application.js.coffee):
    在jquery 之后立即需要 jquery.turbolinks
    <脚本
    之后需要 turbolink。
  3. 示例:

    #= require jquery
    #= require jquery.turbolinks
    #= require jquery_ujs
    
    # ... your other scripts here ...
    
    #= require turbolinks
    


    有了上述内容,您既不需要更改代码也不需要更改行:

    $(document).ready(ready)
    $(document).on('page:load', ready)