二重送信を防止したい

Drupalで記事を新規投稿するときに、保存ボタンを二重クリックするとノードが2つ作成される。

もしくは故意で連打すると押した分だけノードが作成される。

業務で使っているなら必ず起きる問題点。

そんなときの回避候補として・・・

JavaScriptで一度押された保存ボタンを無効にする。

保存前にpopupを表示し、保存する。

Rulesモジュールである時間内に、同一のタイトルで保存出来ないようにする。

そんなモジュールがあれば・・・。

ということで、Hide submit buttonという丁度よいモジュールがあった。

モジュールをインストール後、

admin/config/content/hide-submit

に設定画面。

一番上の「Blocking method」設定

Disable the submit buttons. ボタンを無効化

Hide the submit buttons. ボタンを非表示

Built-in loading indicator. ボタンのところにローディングを表示

Reset buttons after some time (ms). *

数字はそのままでも0でも良い。

ローディングボタンのサンプルはhttp://lab.hakim.se/ladda/で確認出来る。

INDICATOR SETTINGSの部分で

ローディングエフェクトの選択が可能。

またローディングエフェクトの色が変えられる。

ボタンの色は変えられない。

検証するとDBが重いサイトでは、結局押した分だけノードが作成されて使えなかったりする。

次の策としてUnique fieldモジュールでタイトルや本文で判定させる方法があるが、これもやっぱり動作が不安定だ。