2017-06-24 69 views
0

我正在开发一个Ruby on Rails项目,在我的视图中单击一个link_to元素应该会触发我的CoffeeScript中的一个方法,但输出永远不会被打印!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]点击处理程序调用?“但没有别的,即使我点击链接后。

我一直在谷歌搜索了很多,几个帖子建议这个问题可能与turbolinks。上面的代码已经反映了我尝试过的几种解决方案中的两种(指定链接中的get方法,附带事件处理函数$(document).on('turbolinks:load', -> ...)),其中没有一个为我解决。我是一个Rails初学者,对CoffeeScript毫无头绪,所以任何帮助都将不胜感激。

编辑:

在事件处理程序中link_to元素和$(document).on('turbolinks:load', -> ...)添加id选择#和删除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!" 

谢谢! :)

+0

你在期待'btn btn-primary btn-lg'选择器是否匹配? –

+0

我发布的'link_to'元素的id是不正确的@mu? – megahra

+0

(1)id-selectors使用'#'。 (2)''btn btn-primary btn-lg''看起来像一个班级列表,而不是一个id。 (3)一些时间阅读[jQuery选择器文档](http://api.jquery.com/category/selectors/)可能是一个好主意。 –

回答

1

1)您需要将您的ID更改为一个有效的(阅读本post),像start_quizz_button

2)使用一个ID选择#

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

谢谢你,这是有道理的!我已经改变了你的建议,但“[AC]点击处理程序叫!”仍然没有打印当我点击按钮:(我会很感激任何其他指针,可能是什么问题 – megahra

+0

Nvm,我删除了上述turbolinks修复,现在它的作品 - 谢谢:) – megahra

+0

别客气。如果能解决你的问题,你可以请你提高我的答案 –