症状
Rails4でJavaScript書いてる時に「リロードするとJS走るんだけれど、普通のページ遷移(特にgetリクエストの時)にJSが走らない。ベタ書きしただけのalert("hello")
すら出てこない」という状況に遭遇することがあります。
HTML見てもちゃんとJSファイルがロードされているし、動かない理由が無いしリロードすると走る。でもリンクをクリックして移動してる時には何故かJavaScriptが起動しない。
原因
可能性の一つとしてturbolinks
を疑ってみましょう。
turbolinks
はRails4の高速化の為に導入された機能で、リンクを踏んだ時にページを普通にロードする代わりにJavaScriptでAjaxして何か上手いことしてくれる機能です。
でもコイツが動いてるとデフォルトではjQueryが思い通りに動かなくなる事があります。
解決策
そういう時はここに書いてある方法に従って以下の変更を試してみましょう。
Gemfile
に以下の行を足す。
gem 'jquery-turbolinks'
app/assets/javascripts/application.js
に以下の行を足す
//= require jquery.turbolinks
ただし、足す場所は//= require jquery
より 後 で //= require turbolinks
より 前 です。
なので記述例としてはこんな感じになります。
//= require jquery
//= require jquery_ujs
//= require jquery.turbolinks
//= require turbolinks
//= require_tree .
Bundle Updateを実行する
Gemfileを更新した場合もbundleし直さないと反映されません。
Rails Serverを再起動する
大事です。忘れててハマってました。
以上、詳しい内容は書いてないですが参考になれば幸いです。
(そのうちRailsの標準に入るかturbolinksのアップデートで解決するんじゃないかという気もする)