プロが教える店舗&オフィスのセキュリティ対策術

お世話になります。
以前開発したVB.NETのアプリケーションでボタン(submit)を連打すると「ページを表示できません。現在、多数の人が Web サイトにアクセスしています。」という現象が出てその対応策を考えています。

実際にはボタンのクリック連打ではなく、ボタンにフォーカスを当ててキーボードのリターンキーを押しっぱなしにするとリクエストが何度もサーバーへ送られて上記のような現象となります。

対応策としてボタンが押された瞬間にJavaScriptでフラグをONにし、そのフラグがONである間は次のJavaScript:onClickイベントをreturn falseするような作りとしてみました。
ボタンは何個かあり、submit後の処理に時間が掛かるもの(情報検索)はそれで対応できたのですが比較的応答が早い処理(検索条件フォームのクリア機能)ではやはり同様のエラーとなってしまいます。

JavaScriptを使い、ボタンそのものを無効化(form.ボタン名.disabled = false)を試みましたが.netの場合はボタンを無効化させるとサーバーサイド(VB)でのpage_load処理が止まってしまうようで無応答となります。

押した瞬間にボタンを無効化させて見た目にも押した状態を表現できるのが一番好ましいのですが、連打を防止しつつボタンを無効化させる方法は無いでしょうか?
また、ボタン無効化は無理としても他に連打の対応策がありましたらご教示願えたらと思います。

A 回答 (1件)

submit属性のボタンは作らずに


ボタンにonmouseupイベントを割り当て
submitを呼び出すか
bodyにkeyupイベントで
submitを呼び出すようにしてはどうでしょうか
    • good
    • 1
この回答へのお礼

アドバイスありがとうございます。
なるほど、submitならばいきなりpostされますがボタン押下のイベントをフックすることにより処理が分岐できますね。

実は質問を投稿した直後に思いついてやったことが、ボタン押下直後にそのボタンのフォーカスを外すという事でした。
document.form.buttonName.blur();とすることによりボタンからフォーカスが外れて、連打する事はなくなりました。

ご回答とは違う結果で解決しましたがとても参考になりました。ありがとうございました。

お礼日時:2005/01/19 08:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています