コードに問題はないので、うまくいかない場合は、表示されていない部分に原因があるはずです。しかし、ここで明らかに人々を混乱させるいくつかのことを指摘しています。
まず、同じスコープでjQuery
との両方を使用する必要はありません。は単なるエイリアスであり、両方の名前が意味を持つ唯一のシナリオは、互換性の理由から (他のバージョンの jQuery または ショートカットとしても使用する他のライブラリと)、次のようにコードをモジュールにカプセル化する場合です。$
$
jQuery
$
(function($) {
// Now $ is bound to whatever object you pass in
})(jQuery);
$
コード内でforを自由に置き換えることができることを考えるとjQuery
、次の誤解は次のとおりです (1 行にまとめてあります)。
$ -> $ -> $("#foo").hide()
このスニペットは、DOM が読み込まれるとコールバックが実行されるようにスケジュールします。#foo
このコールバックは、DOM がロードされると非表示になるように別のコールバックをスケジュールします。2 番目のスケジュールは、DOM が既に読み込まれているときに実行されるため、実際にはすぐに実行されます。そのため、実際に使用する必要がある場合でも、
$ -> $("#foo").hide()
元のコードに余分な「レベル」があっても害はありません。実際、すべてが期待どおりに機能します。ところで、これはあなたのコードの最もコンパクトなバージョンです:
$ ->
el = $("#secondthing")
el.hide()
$("#trips").change ->
el[if $('#trip_quantity :selected').text() == '1' then "hide" else "show"]();