Coffeescript JQuery on click 仅在页面刷新时有效

Posted

技术标签:

【中文标题】Coffeescript JQuery on click 仅在页面刷新时有效【英文标题】:Coffeescript JQuery on click only working when page is refreshed 【发布时间】:2013-12-13 16:31:51 【问题描述】:

我有一个使用 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)

【问题讨论】:

您在使用 Turbolinks 吗?如果是这样,当 DOM 被刷新时,表单上的处理程序就会被吹走。您需要将其包装在 page:restore page:load 类型处理程序中。 是的,我是。起初我没有意识到我是。谢谢你! 【参考方案1】:

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

当您使用自 Rails 4 以来默认的 turbolinks 时,还包括 [jquery.turbolinks gem][1]

说明很简单。

    在您的 Gemfile 中添加:gem 'jquery-turbolinks' 在您的 javascript 清单中(默认:app/assets/javascripts/application.js.coffee): 需要 jquery.turbolinks 紧接在 jquery 之后。 在您的脚本之后需要turbolinks

例子:

#= require jquery
#= require jquery.turbolinks
#= require jquery_ujs

# ... your other scripts here ...

#= require turbolinks

有了上述内容,您的代码和行都不需要任何更改:

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

【讨论】:

jquery-turbolinks 现已弃用:github.com/kossnocorp/jquery.turbolinks【参考方案2】:

所以事实证明是涡轮链接导致了问题。感谢大卫伯伯指出这一点。这是我为修复它所做的(来自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)

【讨论】:

还必须添加 $(document).on('turbolinks:load', ready);让它工作

以上是关于Coffeescript JQuery on click 仅在页面刷新时有效的主要内容,如果未能解决你的问题,请参考以下文章

Coffeescript JQuery on click 仅在页面刷新时有效

CoffeeScript - 如何在 ruby​​ on rails 中使用咖啡脚本?

CoffeeScript:如何使用胖箭头和这个?

CoffeeScript:如何同时使用胖箭头和 this?

ruby on rails 中的 Coffeescript 编译错误

Javascript/Coffeescript/jQuery 中是不是有与 Ruby 的发送等效的内容?