QA@IT

Ruby on Rails3において、ボタンを押下した際にボタンの二度押しを防止する方法

4722 PV

質問失礼いたします。

表題の件について、submit_tagsubmit:disable_withを用いて、

submit_tag("送信",:disable_with => "処理中...")

のように記述すると、ボタンを押下した際にボタンに"処理中..."というテキストが表示されグレーアウトされますが、これと同様または類似の挙動をbutton_toを用いて実装する方法はありますでしょうか?

具体的な状況を補足しますと、二度押しを防止したいと考えているページではボタンを押下した際に、仮登録用のレコードに保存したデータを本登録用のレコードへ保存するといったテーブル間におけるデータの受渡し処理を実行し、その処理が完了した後に次ページへ遷移するといった一連の挙動をとります。当該ページにおいては、フォームからの送信は発生しないためsubmit_tagやsubmitではなくbutton_toを配置しています。

"処理中"の表示はともかく、 二度押しが防止 できれば良いと考えていますがアイデアが浮かびません。

初歩的な質問で恐縮ですが、何かご意見をいただけますと幸いです。よろしくお願いいたします。

version: Rails 3.2.13, ruby 1.9.3p194

回答

submit_tag と似たようなことをやりたいのですから、まず submit_tag がどうやってるのか調べるとよいのではないでしょうか。

検索してみると以下のようなサイトが引っかかりますし、実際に動かしてみてからHTMLソースを確認してみてもいいでしょう。
http://d.hatena.ne.jp/zariganitosh/20070623/1182551690

見てみると分かりますが、単にボタン押されたら disabled にして、二度押しができないようにしてるだけです。
昔からある手法で、Rails はそれを簡単に実装できるようにしてるだけですね。
なので、Rails が出力しているコードをまねて、onclick イベントで disabled にしてあげればいいと思いますよ。

編集 履歴 (0)
  • Oakbow7さん

    ご回答いただきありがとうございます。Railsを覚え始めたばかりなもので、ついRailsのメッソッドだけでやってしまおうと考えてしまっていました。

    教えていただいた方法で実装してみようと思います。ご丁寧に回答いただきありがとうございました。
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。