2017-06-24 122 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

別客氣。如果能解決你的問題,你可以請你提高我的答案 –