2012-06-27 56 views
0

我對編碼一般都很陌生,在rails中學習代碼,覺得我在jquery中缺少一些非常基本的東西。link_to jquery函數

在我的用戶的個人資料頁,有一個鏈接,用戶可以更改自己的頭像圖片:

<div id="show_avatars_choice"> 
    <%= link_to "Change Avatar", "#", remote: true %> 
</div> 

然後,在/assets/javascripts/users.js,我有:

$("#show_avatars_choice").on("click", function(event){ 
    event.preventDefault(); 
    alert("you clicked me"); 
}) 

最終,警報將被替換爲允許顯示替代的頭像圖片的代碼的一些代碼,但是在此階段,即使單擊鏈接時也不彈出簡單的警報。我究竟做錯了什麼?

的的application.js文件不包含以下行:提前

//= require jquery 
//= require jquery_ujs 
//= require_tree . 

感謝您的任何答覆。

+0

HTTP://api.jquery。 com/event.isDefaultPrevented/ 試試這個 'alert(「你點了我」); event.preventDefault();' – ShaggyInjun

+0

謝謝,但改變這兩行也沒有幫助。 –

+0

除了users.js中的這些行之外,還有其他任何東西嗎? – BumbleBoks

回答

2

什麼特雷西福說是正確的,該元素應在綁定前的頁面。她的回答是正確的,但它是更短,如果你這樣做:

$(document).on("click", "#show_avatars_choice", function(event){ 
    event.preventDefault(); 
    alert("you clicked me"); 
})​ 

看到它在行動:http://jsfiddle.net/sXVzU/

也做了一些改變特雷西傅琴:http://jsfiddle.net/4qRjt/

+0

同意@Vincent。這是更清潔,更簡潔:) –

+0

感謝文森特和特雷西,尤其是優雅的小提琴。它仍然不起作用,看起來像我將不得不學習如何正確使用螢火蟲,以便我可以追蹤它。 –

+0

好吧,我是個白癡。所以當我將自動生成的users.js.coffee文件更改爲只有用戶。js,我在那裏留下了三條評論線'#把所有行爲和鉤子......'放在那裏,所以推測這不會被認爲是js中的評論,所以users.js沒有被加載。擺脫他們,使用文森特的代碼上面,現在所有的工作都是一種享受。謝謝! –

0

問題是否有可能在DOM元素存在之前綁定事件?據我所知,jQuery的on仍然要求元素在初始綁定之前在頁面上。

難道你試試這個:

// This will run when the DOM is loaded 
$(function() { 
    $("#show_avatars_choice").on("click", function(event){ 
    event.preventDefault(); 
    alert("you clicked me"); 
    }) 
}); 

以下示範試之前和DOM負荷後綁定一個小提琴: http://jsfiddle.net/tracyfu/FX5aC/