0

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

我有这个代码:

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

当我把它放在我的视野和之间时,它会<script>起作用</script>

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

我的视图无法识别资产中的 javascript,我做错了什么?

这是咖啡脚本中的代码:

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

我的 application.js 有

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

1 回答 1

1

您的 CoffeeScript 生成以下 JavaScript:

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

如您所见,它不一样。

请注意一些事项:

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

在正确的 CoffeeScript 中,您的代码片段可能如下所示:

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

将代码放入资产管道时未执行代码的原因是它最终会出现在文档的头部而不是正文中,因此它将在浏览器完成加载 DOM之前执行.

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

为了解决这个问题,用 JQuery 包装你的代码:

$ ->
  # Your code goes here

JQuery 将确保您的代码仅在 DOM 准备好进行操作时执行。

于 2013-03-04T19:49:47.553 回答