JQueryはちゃんと書けている。ソースも更新されている。
しかし、狙い通りに動作しない。Javascriptのエラーもでてない。
単純にalert();とかconsole.log();とかやっても反応しない。
全く動かないわけではなく、ページを再読み込みしたときは狙い通りに動く。
ぐぬぬ。
理由はturbolinksだった。
application.html.erb
<%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
turbolinksがあるとSPAのような動きをするらしい。(SPAよく知らないが)
Rails 4のturbolinksについて最低でも知っておきたい事
turbolinksの動作は、すごく大雑把に言うと以下の通りです。
- リンクのclickイベントをフック
- リンク先のページをXHRで取り寄せる
- レスポンスをDOM化
- 現在のページと取り寄せたページの外部JavaScriptファイルとCSSファイルが同一なら、titleとbodyを読み込んだページのもので置き換える
上記の理由で$(document).readyが発火しない。なるほど。
Rails5では書き方がまた違う
動いた。
変更前.js
$(function () {
// 処理
});
変更後.js
$(document).on('turbolinks:load', function() {
// 処理
});