Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

症状

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のアップデートで解決するんじゃないかという気もする)

kumagi
ロックフリーです。
http://d.hatena.ne.jp/kumagi/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away