Railsでページ遷移時に何故かJavaScriptが起動しない時

  • 111
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

症状

Rails4でJavaScript書いてる時に「リロードするとJS走るんだけれど、普通のページ遷移(特にgetリクエストの時)にJSが走らない。ベタ書きしただけのalert("hello")すら出てこない」という状況に遭遇することがあります。

HTML見てもちゃんとJSファイルがロードされているし、動かない理由が無いしリロードすると走る。でもリンクをクリックして移動してる時には何故かJavaScriptが起動しない。

原因

可能性の一つとしてturbolinksを疑ってみましょう。

turbolinksはRails4の高速化の為に導入された機能で、リンクを踏んだ時にページを普通にロードする代わりにJavaScriptでAjaxして何か上手いことしてくれる機能です。
でもコイツが動いてるとデフォルトではjQueryが思い通りに動かなくなる事があります。

解決策

そういう時はここに書いてある方法に従って以下の変更を試してみましょう。

Gemfileに以下の行を足す。

Gemfile
gem 'jquery-turbolinks'

app/assets/javascripts/application.jsに以下の行を足す

app/assets/javascripts/application.js
//= require jquery.turbolinks

ただし、足す場所は//= require jqueryより //= require turbolinks より です。
なので記述例としてはこんな感じになります。

app/assets/javascripts/application.js(例)
//= require jquery
//= require jquery_ujs
//= require jquery.turbolinks
//= require turbolinks
//= require_tree .

Bundle Updateを実行する

Gemfileを更新した場合もbundleし直さないと反映されません。

Rails Serverを再起動する

大事です。忘れててハマってました。

以上、詳しい内容は書いてないですが参考になれば幸いです。
(そのうちRailsの標準に入るかturbolinksのアップデートで解決するんじゃないかという気もする)