RailsでjQueryが動かないと思ったら
Railsを使ってて忘れがちな点。
Turbolinks
こいつがjQueryの動きを止めます。
といっても、ページ読み込みを劇的に早くしてくれる強い味方なので、是非とも使いたい。
※ Rails4からTurbolinksはデフォルトGemになりました。
※ Rails3でも使えます。もちろんRails4で使わないという選択肢もあります。
Turbolinksとは
ページ上のリンクをクリックした時に、ページ全体をリロードさせるのではなく、bodyタグの中身とheadの中のtitleを同一ページ上で書き換える方法。
.jsとか.cssとか処理し直さないので、ページの読み込みがかなり早くなる。
↓こんなにごちゃごちゃ読み込んでたのが…
↓こうなったり、、、するので早いのは当然。
問題
下のようにjQuery(coffee script)を書いている場合は動かない。
1
2
3
jQuery ->
$('.selector').on 'click', '.selector2', (event) ->
$(this).prev('input[type=hidden]').val(1)
なぜって、リロードしてるように見えて実際には同一ページのままだから。
$(document).ready()が発火しない。
.ready() Description: Specify a function to execute when the DOM is fully loaded.
なので、
下記のように変更する。
1
2
3
4
5
6
ready = ->
$('.selector').on 'click', '.selector2', (event) ->
$(this).prev('input[type=hidden]').val(1)
$(document).ready(ready)
$(document).on('page:load', ready)
ドキュメント:
rails/turbolinks