経緯

Railsではlink_toヘルパーにdata: {confirm: 'よろしいですか?'}のように書くと、リンクをクリックしたときに確認のアラートが出るようにできます。
ただ、いつもどこでも、ajaxを飛ばすなど、リンク先に遷移するわけではありません。

そういうときに、confirmでOKされたときにだけ実行するJSの書き方。ここではCoffeeScriptを利用します。

やり方

やり方は簡単以下のとおり。

<%= link_to '部活をやめる', id: 'retire', data: { confirm: '部活をやめますか?' } %>
<span class="message"></span>
$('#retire').on 'confirm:complete', (e, answer) ->
  if answer
    $('span.message').text("南部、部活やめるってよ")

ここで、data-confirmがOKされたとき、’confirm:complete’というイベントが発火します。それを捉えて処理を実行するようになっています。

まとめ

このくらいの場合であれば、JSのconfirm()関数を利用して作ってやってもいいかもしれませんが、Rubyで書いてやったほうがI18n対応が楽になります。Railsではconfirm:completeのような独自のイベントをたくさん持っているので、イベント系で困ってもググれば意外と出てくるかもしれません。