0

我对一般编码相当陌生,学习在 Rails 中编码,并且觉得我缺少 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 .

提前感谢您的任何回复。

4

2 回答 2

2

Tracy Fu 说的没错,元素应该在绑定前的页面上。她的回答是正确的,但如果你这样做会更短:

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

看看它在行动:http: //jsfiddle.net/sXVzU/

Tracy Fu 的小提琴也做了一些改动:http: //jsfiddle.net/4qRjt/

于 2012-06-28T07:35:44.807 回答
0

问题是否可能是您在元素存在于 DOM 之前绑定事件?据我了解,jQueryon仍然要求元素在初始绑定之前位于页面上。

你能试试这个:

// 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/

于 2012-06-28T04:49:23.063 回答