• 締切済み

PC、携帯の両環境で有効なボタンの二度押し防止機能

自サイトのCGIにて、フォームのボタンに二度押し防止機能を付けたいのですが、 まず当初 <input type="submit" value="$def_ok"> としていたものを <input type="button" value="$def_ok" onClick="this.disabled=true; this.value='$def_ok'; this.form.submit();"> としました。 これでPCブラウザからの動作に問題は無いようなのですが、一部の携帯電話からのアクセスでボタンが機能しないという報告が多数寄せられまして(javascriptが機能していないため?) 対策として <input type="submit" value="$def_ok" onClick="this.disabled=true; this.value='$def_ok'; this.form.submit();"> としました。(type=buttonを再度submitに変更) submitが二回で二重送信になりそうな気がしましたが… this.disabled=true;で最初のsubmitは無効になっていそうだから大丈夫かな、と思ったのですが、 どうもやはりたまに二重送信が起こってしまっているようなのです。 100%ではなく、数十回に一回程度の割合で起こるようですがよく原因がわかりません。 かと言って <input type="submit" value="$def_ok" onClick="this.disabled=true; this.value='$def_ok';"> とするとやはりPCブラウザからは無効になってしまうようで、ほとほと困り果ててしまいました。 CGIの性質上、二度押し防止機能自体は是非欲しいのですが… 何か上手い方法はありませんでしょうか?

みんなの回答

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.1

なぜCGI側につけないのですか?  私も安全のため、よほど必要性のあるものを覗いてjavascriptそのものを停止しています。  こういう機能はねCGI側で対処すべきものだと思います。  そのページをCGIから表示させて、<input type="hidden" name="check" value="081014125401">とかで、秒単位のコードでも入れておけば、一旦受け付けたものは拒否するとか、完了画面を再提出するとか?

Ash_Y
質問者

補足

ご回答ありがとうございます。 CGI側で対処しない理由は、性質上非常にボタンのクリック回数が多く、サーバーの負荷も高いスクリプトのため負荷の増大が心配だからという事もあります。 二度押し防止機能の必要性と負荷の事を天秤にかけると、どちらとも決められかねます。 ですので、もし出来ることならなるたけブラウザ側での処理で間に合わせたいのです。 よろしくお願いします。 二度押し防止機能自体は、携帯キャリアからのアクセスやjavascriptを停止している方には動作しなくても別に構いません。 一般的なPCブラウザで機能すればいいのですが。

関連するQ&A

専門家に質問してみよう