• ベストアンサー

ボタン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

  • JavaScriptのinput要素のonclick内で直接JavaS

    JavaScriptのinput要素のonclick内で直接JavaScript文を書きたい <input type="button" onclick="func()" value="ボタン"> のようにonclick内で関数を呼び出すことはできますが、 以下のようにスクリプトを直接書き込むのは可能でしょうか? (これは私が適当に考えただけなので多分動作はしませんが) <input type="button" onclick="javascript:( var a = 123; alert( a ); )" value="ボタン"> というのもちょっと試したいだけのときなど、 なるべく外部呼出しにしたくないことも多々あるもので・・

  • ボタンを動的にdisabledさせたいのですが

    お世話になります。 ある画面に複数ボタンがあって 押されたボタンをdisabledにしたいなと思っています。 ただしどのボタンがおされても同じ関数に飛んでほしいのですが いまいち解決できません。 <form name="form"> <input type="button" name="syori1" value="ボタン1" onClick="javascript:hogehoge()"> <input type="button" name="syori2" value="ボタン2" onClick="javascript:hogehoge()"> <input type="button" name="syori3" value="ボタン3" onClick="javascript:hogehoge()"> </form > とあった場合 function hogehoge(){ document.form.ボタンの名前.disabled=true; } としたいのですが 名前の部分は動的に変えることは可能なのでしょうか? 普通に document.form.syori1.disabled=true; と書けば簡単なのですが、ボタンの数が決まっていないためボタン名を指定して書くことはできません。 ボタン名は onClick="javascript:hogehoge(document.form.ボタンの名前.name)" で、送ることができるのは確認したのですが hogehoge(ボタンの名前) の方でどうやってdisabledのところに入れればいいか解りません。 よろしくお願い致します。

  • JqueryMobileでフォームボタンを非表示

    JqueryMobileを使用している環境下でフォームボタンを非表示にする方法を探しています。 以下はID1の消去ボタンをクリックすると、ID2のボタンが消えることを期待しているものです。 しかし、ID2のボタンは消えませんでした。 どのような方法で、フォームボタンを非表示にできるのでしょうか。 なお、JqueryMobileを使用していない環境では、 問題なくID2のボタンが非表示になることを確認していますので、 JqueryMobile使用時のJavascriptの制限が何かしらありそうなのですが・・・。 <form name="myForm" action="#"> <input type="button" value="消去" name="button1" id ="1" onclick="a()"> <input type="button" value="消えるボタン" name="button2" id ="2" > </form> <script type="text/javascript"> <!-- function a(){ var n = document.getElementById("#2"); n.style.visibility = "hidden"; $('#2').button('refresh'); } // --> </script>

  • 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の性質上、二度押し防止機能自体は是非欲しいのですが… 何か上手い方法はありませんでしょうか?

  • JavaScriptがFirefoxで動かない・・・

    よろしくお願いいたします。 IEでは正常に動作するのですが、Firefoxで実行してみると ボタンを押しても何の反応もありません。 どのように変更すればFirefoxで動作するのでしょうか? よろしくお願いいたします。 <SCRIPT LANGUAGE="JavaScript"> <!-- function warning(){ alert("テストです。"); } //--> </SCRIPT> <FORM><INPUT type="button" value="ボタンを押して。" onClick="warning()"></FORM> 上記のコードを外部に独立させて・・・ 【コード】 <script type="text/javascript" src="sample3.js"></script> <input type = "button" name = "button3" value = "sample3" onclick = "Func3();"> 【sample3.js】 function Func3() { alert("js外部ファイル記述"); } です。 FC2ブログで活用したいのですが・・・ 改行の扱いは「HTMLタグのみ」に設定しています。 ご回答、よろしくお願いいたします。

  • 「ボタン」の幅の長さ

    「ボタン」の幅の長さを揃えたいのですが、 「★幅の設定」 の仕方を教えてください。よろしくお願いいたします。 <INPUT type="button" value="簡単" onclick="javascript:window.location.href='http://'">

  • ダイアログボタン:2回目から表示画面を変える

    いつもお世話になっています。 現在、簡単なプレゼントフォームを作っているのですが <FORM> <INPUT TYPE="button" NAME="" VALUE=" この賞品の抽選に参加する " onclick="javascript:window.alert('応募が完了致しました');" style="cursor:hand"/> </FORM> というボタンを2回目以降押すと「この懸賞には既に応募されています」と表示させる(Cookieなどが関わってくるのかな…?)にはどのように記述すればよろしいでしょうか…? またはHTMLタグでは無理でしょうか?;

  • JavaScriptを使ってボタンを消したい

    <input type="button" value="ボタン" name="aaa" onClick="this.style.display='none'"> で、消すことができますが、 これをJavaScriptを使って、 別のところからボタンを消すためにはどうやったらいいのでしょうか? #例えばどこかをクリックしたときにボタンを表示したり消したりするなど。

  • ボタンの長さを変えたい(至急)

    <INPUT TYPE=BUTTON VALUE="最新100回グラフ" onClick="location.href='../grf/100.htm'"> <INPUT TYPE=BUTTON VALUE="最新50回グラフ" onClick="location.href='../grf/50.htm'"> このようなボタンの長さを揃えたいです。 スペースで調節するしかないのでしょうか?

    • ベストアンサー
    • HTML
  • 無効な viewstate

    無効な viewstate 事情があり、javascriptからaspのフォームをサブミットしたいと考えています。 後述したプログラムを記述しましたが、「無効な viewstate です」といった エラーが発生します。 おそらく、javascriptから実行したsubmitが、aspのviewstateの値をサーバに 送信していない為だと思うのですが、javascriptでviewstateを取得する方法など 回避策はあるのでしょうか? <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <script type="text/javascript"> function btn_onclick() { document.getElementById("form1").submit(); }; </script> </head> <body> <form id="form1" runat="server" action="nextpage2.aspx"> </form> <input type="button" value="test" onclick="javascript:btn_onclick();" /> </body> </html>

専門家に質問してみよう