###前提・実現したいこと
Ruby on Railsで記述しているselectタグの変更を検知するイベントを、CoffeeScriptで記述したい。
###発生している問題・エラーメッセージ
ページ読み込み時に一度実行されるが、ブラウザからselectの選択を変えても、JSコンソールには何の反応もない。
###該当のソースコード
lang
1<%= select_tag('pay_category', options_from_collection_for_select(@categories, :category, :category)) %><br>
lang
1do -> 2 console.log('test') 3 4 $('.pay_category').on 5 'change': console.log('change')
###chromeのJSコンソール出力結果
①ページ読み込み時
test
change
②select要素変更時
①と変化なし
###試したこと
CoffeeScript公式サイトのTRY機能でコンパイルしたところ、以下のようにコンパイルされました。
lang
1(function() { 2 console.log('test'); 3 return $('.pay_category').on({ 4 'change': console.log('change') 5 }); 6})();
最後の処理にreturnが付くのがCoffeeScriptの仕様と勉強したのですが、それによって即時関数が終了してしまっている(?)ことが原因かと考え、色々検索してみたのですが解決することができず、ご質問させていただきました。
初歩的な質問となってしまい、大変申し訳ございません。
もし解決方法をご存知でしたら、お手数をおかけいたしますがよろしくお願い致します。
###2016/5/1 21:30追記
皆様ご回答いただきましてありがとうございました。
お恥ずかしながら、classとidの指定方法を混合しておりました。
いただいたご回答をもとに、以下のとおり修正致しました。
lang
1 $('#pay_category').on 'change', -> 2 console.log 'change'
しかし、これでselectの選択を変更してもJSコンソールに変化がなく、もっと根本的なところに原因があるのかと、次の実験を行いました。
【実験①:シンプルに要素の取得だけ試す】
以下のコードを追記し、要素の取得ができているかどうかの実験を行いました。
Viewにただのテキストボックスを追加。
lang
1<%= select_tag('pay_category', options_from_collection_for_select(@categories, :category, :category)) %><br> 2<input type="text" id="textone" value="textone初期値">
CoffeeScriptに以下を追加。
lang
1do -> 2 console.log('test') 3 4 #追加 5 test = $('#textone').val() 6 console.log(test) 7 8 $('#pay_category').on 'change', -> 9 console.log 'change'
しかし、textoneのログ結果はundifinedでした。
ですので、根本的にフォームの要素を取得できていないことがわかりました。
【実験②:Viewにscriptを書いて実験】
Viewファイルの1番下に以下を追加。
lang
1<script> 2 var test; 3 test = $('#textone').val(); 4 console.log(test); 5</script>
そうすると、JSコンソールには以下の通り表示されました。
textone初期値
よって、やはりCoffeeScriptとViewの接続がうまくいっていないように思えます。
【実験③:applicasion.jsに書いて実験】
本来は推奨されないと読んだのですが、AssetPipelineに問題があるのかと思い、application.jsに実験①と同様のコードを書いた実験も行いました。
しかし、結果はundifinedとなりました。
ですので、原因はView←→CoffeeScriptにありそうです。
せっかくご回答いただきましたのに、別の所に原因がありまして大変申し訳ございませんでした。
ご回答をいただきましてから本原因の調査もしてみたのですが、解決する情報を見つけることが出来ませんでした。
もしまだお付き合いいただけましたら、本原因もご存知でしたら、ご教授いただけると幸いです。
環境はmacにvagrantで作ったcentos環境を使用しており、今回が初railsですのでgemなどは足りないものが出てきたらググッて追加しているところであります。
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/05/01 13:11
2016/05/02 11:26