2014-12-05 51 views
0

我的rails 4應用程序根本不處理jQuery .click事件。Rails沒有處理我的jQuery .click事件(甚至無法彈出提醒。)

從Chrome瀏覽器控制檯它可以工作,當我輸入這個,然後點擊一個h3。

$("h3").click(function() { return alert("Clicked that thang");}); // This alerts on click of a h3 

但是,當我在我的應用程序包括equivilent代碼(在CoffeeScript中),它什麼都不做..

# app/assets/javascripts/collaborators.js.coffee 

alert("does this work?")  // yes this pops up an alert 

$("h3").click -> 
    alert("Does this work?")  // sadly nothing now happens when I click my h3's 

我可以告訴大家,jQuery是加載。

Chrome的控制檯:

>> $.fn.jquery 
"1.10.2" 

我也有一展身手,在清算資產管道:

$>耙資產乾淨#但這並幫不了我。

幫助,怎麼了,我錯過了什麼?

Rails 4.0應用程序。

+0

看看事件委託 - http://stackoverflow.com/questions/203198/event動態創建元素綁定 – 2014-12-05 06:52:34

+1

'$(document).on'click','h3' - > alert(「Does this work?」)' – 2014-12-05 06:53:40

+0

嘗試使用body標籤綁定事件。 – vjdhama 2014-12-05 06:54:49

回答

1

這個問題似乎是你正在處理動態創建的元素。該解決方案是使用事件代表團

$(document).on 'click', 'h3', -> 
    alert("Does this work?") 

想了解更多關於爲什麼
- Event binding on dynamically created elements?
- Understanding Event Delegation

+0

它是否就像我在這裏使用$(body).on或者是$(document).on出於任何原因? – Evolve 2014-12-05 07:06:55

+2

@Evolve都是一樣的......但是如果你對所有目標'h3'元素有一個更具體的祖先,那麼就使用它......就像一個靜態的'div#heparent',它將擁有所有'h3'元素,然後你可以使用'('#h3parent')。on ...' – 2014-12-05 07:10:50

2

試試這個

$("body").on "click", "h3",()-> 
    alert("Does this work?") 

如果不是這種情況,那麼turbolinks可能是罪魁禍首,這樣做

ready =()-> 
    $("body").on "click", "h3",()-> 
    alert("Does this work?") 

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

剛剛嘗試過,不幸的是這並沒有爲我工作。 – Evolve 2014-12-05 06:56:16

+0

檢查我已編輯的答案 – RSB 2014-12-05 07:00:10

+0

我的代碼在我的application.js中使用了這個確切的結構,在這個控制器的js中,例如collaborators.js.coffee是否建議我包含上面的完整代碼,或者我可以擴展到獲得進入正在運行的現有準備好的方法? – Evolve 2014-12-05 07:03:31

1

它可以成功地從控制檯,因爲你的HTML代碼存在,所以它可以在DOM中找到h3元素並註冊點擊事件,但咖啡腳本可能不會這樣。 JS在加載HTML元素之前完成執行。所以請嘗試使用document.ready,或者也可以使用事件委派。

$(document).ready -> 
$("h3").click -> 
    alert("Does this work?") 
+1

好的,這是可行的! – Evolve 2014-12-05 07:00:45

1

當你的JS被執行時,你的元素沒有被加載,所以它找不到任何h3元素。你必須wait until your document is ready

$ -> 
    $("h3").click -> 
    alert("Does this work?")