Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
rails中的jquery不';无法识别单击事件_Jquery_Ruby On Rails_Click_Coffeescript - Fatal编程技术网

rails中的jquery不';无法识别单击事件

rails中的jquery不';无法识别单击事件,jquery,ruby-on-rails,click,coffeescript,Jquery,Ruby On Rails,Click,Coffeescript,在Rails中使用jQuery是新手,无法为click或hover事件识别div。也可以使用coffeescript,但编译看起来不错。这些div在chromedev工具的elements窗口中看起来都不错,但是我没有在console窗口中获得console.log my_form.html.haml的一部分 .field = f.label :question = f.text_field :question %p Click the plus sign to add answers.

在Rails中使用jQuery是新手,无法为click或hover事件识别div。也可以使用coffeescript,但编译看起来不错。这些div在chromedev工具的elements窗口中看起来都不错,但是我没有在console窗口中获得console.log

my_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);

我这样做是不是把事情搞砸了?

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

console.log $('#pluganswer').length
要解决此问题,请将代码包装在jQuery的document ready包装器中,如下所示:

$ ->
  # the rest of your code goes here
这看起来有点不可思议,但其工作原理如下:当您将函数传递给jQuery对象时,
$
,它仅在
文档
的“就绪”事件触发后运行该函数。因此,再次假设代码位于标记之前,您应该得到以下行为:

console.log $('#pluganswer').length    # 0
$ ->
  console.log $('#pluganswer').length  # 1, because the page's markup is loaded

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

console.log $('#pluganswer').length
要解决此问题,请将代码包装在jQuery的document ready包装器中,如下所示:

$ ->
  # the rest of your code goes here
这看起来有点不可思议,但其工作原理如下:当您将函数传递给jQuery对象时,
$
,它仅在
文档
的“就绪”事件触发后运行该函数。因此,再次假设代码位于标记之前,您应该得到以下行为:

console.log $('#pluganswer').length    # 0
$ ->
  console.log $('#pluganswer').length  # 1, because the page's markup is loaded

是否将单击事件包装在
$(document).ready()处理程序中?当我刚开始使用CoffeeScript时,语言之间的差异也让我忘记了使用它。什么是
appendto
?jQuery有
appendTo
,但它需要一个参数。您知道您将生成无效的HTML,对吗?在HTML中不能有重复的
id
s。塞尔吉奥,你当然是对的。无法给你点击,因为你在评论中回答了。嘿,穆,我正在尝试解决你前几天帮我解决的关于在表单中添加字段的问题。你的建议是.clone,然后.append。我试着把它们链接在一起,然后我试着附加到(忘记大写的T)。现在我从一个id切换到一个类,但什么也没有发生。@muistooshort--我尝试键入一系列用逗号分隔的答案,但得到了以下错误:字段被定义为(n)数组,但收到了一个值为“今天、昨天、2天前”的字符串。您是否将单击事件包装到
$(document).ready()
处理程序中?当我刚开始使用CoffeeScript时,语言之间的差异也让我忘记了使用它。什么是
appendto
?jQuery有
appendTo
,但它需要一个参数。您知道您将生成无效的HTML,对吗?在HTML中不能有重复的
id
s。塞尔吉奥,你当然是对的。无法给你点击,因为你在评论中回答了。嘿,穆,我正在尝试解决你前几天帮我解决的关于在表单中添加字段的问题。你的建议是.clone,然后.append。我试着把它们链接在一起,然后我试着附加到(忘记大写的T)。现在我从一个id切换到一个类,但什么也没有发生。@muistooshort--我尝试键入一系列用逗号分隔的答案,但得到了以下错误:字段被定义为(n)数组,但收到了一个值为“今天、昨天、2天前”的字符串。谢谢Trevor。嘿,我拿了你的咖啡剧本。不幸的是,它似乎更适合中级到高级Javascript程序员。我是一个初学者,刚开始就偶然发现了咖啡脚本。由于不正确,我经常出错;和}和)几乎没有“标点符号”的错误。现在都是Javascript中的愚蠢的初学者错误。现在是哈姆、鲁比等。谢谢你买这本书!我强烈建议在学习CoffeeScript之前先学习JS的基础知识。一个很好的资源是交互式jQuery空中课程。谢谢Trevor。嘿,我拿了你的咖啡剧本。不幸的是,它似乎更适合中级到高级Javascript程序员。我是一个初学者,刚开始就偶然发现了咖啡脚本。由于不正确,我经常出错;和}和)几乎没有“标点符号”的错误。现在都是Javascript中的愚蠢的初学者错误。现在是哈姆、鲁比等。谢谢你买这本书!我强烈建议在学习CoffeeScript之前先学习JS的基础知识。一个很好的资源是交互式jQuery空中课程。