【问题标题】:Coffeescript on click event not firing?点击事件上的Coffeescript没有触发?
【发布时间】:2017-06-24 20:53:29
【问题描述】:

我正在开发一个 Ruby on Rails 项目,在该项目中单击视图上的 link_to 元素应该会触发我的 CoffeeScript 中的一个方法,但从未打印输出!

这是我的 HTML 的相关部分(链接有效):

<%= link_to 'Start Quiz!', {:controller => :pages, :action => :start_quiz}, :id => 'btn btn-primary btn-lg', :method => :get %>

这是我的 ActionCable CoffeeScript 文件中的方法:

App.quiz_data = App.cable.subscriptions.create "QuizDataChannel",
  connected: ->
    console.log "[AC] on click handler called?"
    $(document).on('turbolinks:load', -> $('btn btn-primary btn-lg').on 'click', -> console.log "[AC] on click handler called!")

我的控制台显示“[AC] on click handler called?”但没有别的,即使我点击了链接。

我在谷歌上搜索了很多,一些帖子表明问题可能出在 turbolinks 上。上面的代码已经反映了我尝试过的几个解决方案中的 2 个(在链接中指定 get 方法,用$(document).on('turbolinks:load', -&gt; ...) 封闭事件处理程序),没有一个为我修复它。我是 Rails 初学者,对 CoffeeScript 一无所知,因此我们将不胜感激。

编辑:

在添加 id 选择器 # 并在事件处理程序中删除 link_to 元素和 $(document).on('turbolinks:load', -&gt; ...) 中的 get 方法后 - 它终于可以工作了! :D

现在的 HTML 元素:

<%= link_to 'Start Quiz!', {:controller => :pages, :action => :start_quiz}, :class => 'btn btn-primary btn-lg', :id => 'start_quiz_button' %>

现在的 CoffeeScript 文件:

App.quiz_data = App.cable.subscriptions.create "QuizDataChannel",
  connected: ->
    console.log "[AC] on click handler called?"
    $('#start_quiz_button').on 'click', -> console.log "[AC] on click handler called!"

谢谢! :)

【问题讨论】:

  • 您希望'btn btn-primary btn-lg' 选择器匹配什么?
  • 我发布的 link_to 元素的 id - @mu 不正确吗?
  • (1) id-selectors 使用#。 (2) 'btn btn-primary btn-lg' 看起来像一个类列表,而不是一个 id。 (3) 花点时间阅读jQuery selector docs 可能是个好主意。
  • 是的,它曾经是我的 css 的一个类,在我多次尝试解决这个问题时,我有时只是将它更改为一个 id。我现在加了一个#,谢谢:)

标签: javascript ruby-on-rails coffeescript


【解决方案1】:

1)您需要将您的 id 更改为有效的(阅读此post),例如start_quizz_button

2) 使用 id-selector #

$(document).on('turbolinks:load', -> $('#start_quizz_button').on 'click', -> console.log "[AC] on click handler called!")

【讨论】:

  • 谢谢,有道理!我已将其更改为您建议的内容,但是“单击处理程序上的 [AC] 调用了!”当我点击按钮时仍然没有打印出来:(我会很感激任何其他关于可能是什么问题的指针。
  • Nvm,我删除了上面提到的两个 turbolinks 修复程序,现在它可以工作了 - 谢谢 :)
  • 不客气。如果它解决了您的问题,请您支持我的回答吗
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-29
  • 1970-01-01
  • 1970-01-01
  • 2012-10-10
  • 1970-01-01
  • 2013-03-10
  • 2021-05-27
相关资源
最近更新 更多