0

在 Rails 中使用 jQuery 的新手,无法识别 div 以用于单击或悬停事件。也使用咖啡脚本,但编译看起来不错。div 在 Chrome 开发工具的元素窗口中看起来都不错,但我没有在控制台窗口中看到我的 console.log。

我的 _form.html.haml 的一部分

.field
  = f.label :question
  = f.text_field :question
%p Click the plus sign to add answers.
.field#answerone
  = f.label :answers
  = f.text_field :answers
#plusanswer
  = image_tag("plusWhite.png", :alt => "plus sign")

.actions
  = f.submit 'Save'

咖啡脚本:

$("#plusanswer").click ->
  console.log("here we are")
  $("#answerone").clone().appendto()

编译的javascript:

(function() {

  $("#plusanswer").click(function() {
    console.log("here we are");
    return $("#answerone").clone().appendto();
  });

}).call(this);

我做 image_tag 的方式是不是把事情搞砸了?

4

1 回答 1

3

我相信塞尔吉奥的评论是正确的。如果您的 JS 出现在页面标记之前,则选择器会$(#plusanswer')在该元素存在之前运行。您可以使用代码验证这一点

console.log $('#pluganswer').length

要解决此问题,请将您的代码包装在 jQuery 的文档就绪包装器中,如下所示:

$ ->
  # the rest of your code goes here

这看起来有点神奇,但它是这样工作的:当你将一个函数传递给 jQuery 对象时$,它只会在document' 的“就绪”事件触发后运行该函数。所以,再次假设你的代码在你的标记之前,你应该得到这个行为:

console.log $('#pluganswer').length    # 0
$ ->
  console.log $('#pluganswer').length  # 1, because the page's markup is loaded
于 2012-05-10T19:34:05.953 回答