轨道中的javascript无法识别

时间:2013-03-04 18:08:03

标签: ruby-on-rails

这是一个相当简单的问题,但我似乎无法弄清楚为什么它不起作用

我有这段代码:

$(".positive").numeric({ negative: false }, function() { alert("No negative values"); this.value = ""; this.focus(); })

当我将其放在<script></script>

之间的视图中时,它会起作用

但是,当我将该公式复制并粘贴到app->assets->javascripts-> page.js.coffee时,它不起作用。我甚至尝试将代码复制并粘贴到JS2Coffee转换器并粘贴代码的咖啡版本。仍然没有运气。

我的错误认为我的观点无法识别我的资产中的javascript?

以下是coffescript中的代码:

$(".positive").numeric
  negative: false
  , ->
  alert "No negative values"
  @value = ""
  @focus()

我的application.js有

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

1 个答案:

答案 0 :(得分:1)

您的CoffeeScript会生成以下JavaScript:

$(".positive").numeric({
  negative: false
}, function() {}, alert("No negative values"), this.value = "", this.focus());

正如你所看到的,它不一样。

请注意以下事项:

  • 您不必使用CoffeeScript。如果您愿意,可以使用纯JavaScript。
  • 如果您想使用CoffeeScript,请阅读其语法。最重要的是:在CoffeeScript中,空白很重要。

您的codesnippet看起来像这样,使用正确的CoffeeScript:

$(".positive").numeric 
  negative: false
  -> 
    alert "No negative values"
    @value = ""
    @focus()

当您将代码放入资产管道时未执行代码的原因是,它将最终位于文档的头部而不是正文中,因此它将在之前执行 / em>浏览器已完成加载DOM。

换句话说 - 还没有任何要获取的元素。

要解决这个问题,请使用JQuery包装代码:

$ ->
  # Your code goes here

JQuery将确保只有在DOM准备好进行操作后才能执行代码。