• ベストアンサー

ボタン2回押しを無効にしたい

フォームを作っているのですが、送信フォームを2,3回クリックする人がいるので制限をかけたいのです。 ・ボタンを2回以上押すと2回目以降の送信を無効化する ・一定時間以内に何度送信ボタンを押しても1回しか有功化しない のいずれかになると思うのですが、制限のかけ方が分からなく困っております。 JavaScriptで入力チェック(onClickで外部JSファイルのformSendを呼びにいきます)を別に行っているので、現在送信ボタンタグは下記のようになっています。 <input type="button" value="送信" onClick="formSend()"> どなたかお知恵をお貸しください。

質問者が選んだベストアンサー

  • ベストアンサー
  • leaz024
  • ベストアンサー率75% (398/526)
回答No.2

NN4 では、ボタンの disabled プロパティが使用できないので、送信フラグを用意するのが良いと思います。 それと、formSend() を button の onClick で起動していますが、これは FORM の onSubmit で実行し、submit ボタンを使用するほうが良いです。(テキストボックス内での [Enter] でも送信されるブラウザがあり、この場合、button の onClick では、これをチェックできないのです。) また、onSubmit には bool 値を返すことで、本来の送信の役割を制御することが出来ます。今回は関数内で submit() を実行しているでしょうから、呼び出し部には false を返すようにしましょう。(trueを返すと、2回送信されます。) あと、これは好みにもよりますが、formSend() 内ではフォームの内容を見るので、フォームオブジェクトを受け取るようにすると記述量が減って楽です。 まとめると、こんな感じでしょうか。 ■スクリプト部   var f_submit = false;   function formSend(f) {     if (! f_submit) {       f_submit = true;       // 入力チェック       f.submit();     }     return false;   } ■フォーム部   <FORM name="form1" onSubmit="return formSend(this)" …>     :   <INPUT type="submit" value="送信">

milktea_
質問者

補足

ご丁寧に質問にお答えいただき、光栄です。 formSend() のチェックをしない場合、スクリプトの記述は変わってくるのでしょうか? すみませんが教えてください、お願いします。

その他の回答 (2)

  • leaz024
  • ベストアンサー率75% (398/526)
回答No.3

> formSend() のチェックをしない場合、スクリプトの記述は変わってくるのでしょうか? 入力チェックはしないけど、二重送信防止はしたい、ということでしょうか? だったら、No.2のスクリプト部から「入力チェック」の部分を削るだけでOKです。 他の部分には、手をつける必要はありません。 # 別のことを聞かれているのだとしたらゴメンナサイ。 # その場合は補足をお願いします。

milktea_
質問者

お礼

ありがとうございました。 私が尋ねたいこととあっております。 勉強になりました。

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

Javascript でボタンを disable にしちゃう、ってのは? function formSend(btn) {   btn.disabled = true;   // 送信の処理   ... } <input type="button" value="送信" onClick="formSend(this)">

milktea_
質問者

お礼

お答えいただき、ありがとうございます。 実際設置してみて、disableというのをはじめてみました。 でも、NNがだめみたいです。 参考になりました、ありがとうございました。

関連するQ&A

専門家に質問してみよう