0

これはかなり単純な質問ですが、なぜ機能しないのかわかりません

私はこのコードを持っています:

$(".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 .
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 に答える