2度押し防止ボタンを作成する方法

このQ&Aのポイント
  • HTML5 + CSS3 を使用して、2度押し防止ボタンを作成する方法を紹介します。
  • 回線が混雑している状況でも、ボタンを2度押ししても1回しかカウントされないボタンを実現するためのjavascriptの改造方法を教えます。
  • オリジナルCSSのボタンを使用した場合、javascriptの「document.form1.button1.disabled = true;」の部分を変更することで、2度押し防止機能を実装することができます。
回答を見る
  • ベストアンサー

2度押し防止ボタン

HTML5 + CSS3 でスマートフォンゲームを作っています。 回線が混雑している状況でボタンを2度押ししても1回しかカウントされないボタンを作りたいと考えています。 【基本的な知見】 下記であれば要望に沿ったボタンになります。(ボタンはCSS3の標準ボタンを使用) <form action="form.cgi" method="post"> <input type="hidden" name="point" value="1" /> <SCRIPT TYPE="text/javascript"> <!-- //submitの2度押し防止 function disableButton(){ document.form1.button1.disabled = true; submitForm(); } function submitForm(){ document.form1.submit(); } // --> </SCRIPT> <input type="button" value="購 入" onClick="disableButton()" name="button1"> </form> 【やりたいこと】 「ボタンに数量を表示したいことと、ボタン上の数値表記とCGIに渡すvalueが異なることがある」ため、CSS3の標準ボタンを止め下記のオリジナルCSSのボタンを使用します。 <button class="button8" type="submit" name="point" value="1050" onClick="disableButton()"><div>50ポイント</div></button> このオリジナルCSSのボタンを使用した場合の2度押し防止のjavascriptはどのように改造すればいいか教えてください。 上記に示したjavascriptの 「document.form1.button1.disabled = true;」のbutton1をpointに変更したところ、数値をCGIに渡せませんでした。 よろしくお願いいたします。

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

  • ベストアンサー
  • DoubtOwl
  • ベストアンサー率50% (63/124)
回答No.1

function disableButton(){ submitForm(); document.form1.button1.disabled = true; } disabledは「無効」なので先にtrueにすると値が参照できません。

tajix14
質問者

お礼

有難うございました。 助かりました。

関連するQ&A

  • 複数ボタンを制御出来る2度押し防止ボタン

    HTML5+CSS3でゲームを作っています。 フォームがあり、ボタンが複数並んでいます。 <SCRIPT TYPE="text/javascript"> <!-- function sendform(){ submitForm(); } function submitForm(){ document.form1.submit(); } // --> </SCRIPT> <FORM action="buy.cgi" method="post" name="form1" id="form1"> <button class="button8" type="submit" name="d4_buy" value="300 onclick="sendform()">300購入</button> <button class="button8" type="submit" name="d4_buy" value="400" onClick="sendform()">400購入</button> </FORM> 上記で正常に作動しますが、3G環境など通信状態の悪い時に、「300購入ボタンを押した直後に400購入ボタンを押す」と700購入が出来てしまいます。 【希望事項】 2つのボタンを連続して押しても2つ目が無効になるようにしたいというのが希望です。 ネットで調べたところ ****************************************** http://okwave.jp/qa/q627484.html ****************************************** <HTML><BODY> <FORM method="get" action="http://www.google.com/search"> <INPUT type="submit" value="submit1" onclick="this.form.q.value=this.value;this.disabled=true;this.form.submit()"> <INPUT type="submit" value="submit2" onclick="this.form.q.value=this.value;this.disabled=true;this.form.submit()"> <INPUT type="hidden" name="q" value="" > </FORM></BODY></HTML> ****************************************** という例があったため、この例に従って <SCRIPT TYPE="text/javascript"> <!-- function sendform(){ submitForm(); } function submitForm(){ document.form1.submit(); } // --> </SCRIPT> <FORM action="buy.cgi" method="post" name="form1" id="form1"> <button class="button8" type="submit" value="300 onclick="this.form.q.value=this.value;this.disabled=true;this.form.sendform()">300購入</button> <button class="button8" type="submit" value="400" onclick="this.form.q.value=this.value;this.disabled=true;this.form.sendform()">400購入</button> <INPUT type="hidden" name="d4_buy" value="" > </FORM> としてみたのですが、うまく数値の引き渡しが出来ません。(NULL となります) どのように改造すればいいか教えてください。 よろしくお願いいたします。

  • ボタンの2度押しを防止するには?

    Webページでボタンの2度押しを防止するにはどうしたらいいでしょうか? onClickでボタンをdisableにするようにしたところ、Submitしません。Disableにした上でSubmitさせるとパラメータが渡せません。 <HTML><BODY> <FORM method="get" name="MyForm" action="page2.html"> <INPUT type="submit" name="submit1" value="submit1" onClick="this.disabled = true;document.MyForm.submit();"> <INPUT type="submit" name="submit2" value="submit2" onClick="this.disabled = true;document.MyForm.submit();"> </FORM></BODY></HTML> 1つのFORM内に複数のボタンがあるため、どのボタンが押されたかがパラメータで渡される必要があります。

  • ボタンを動的に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のところに入れればいいか解りません。 よろしくお願い致します。

  • Javascriptで二重送信を防止したいが、画像ボタンだとうまくいかない。

    Javascriptでフォームの二重送信防止を行いたいのですが、 送信ボタンが画像だとうまく動作しないようです。 下記のサイトを参考に作ってみたのですが、アラートすらもでないようです。 http://www.futomi.com/lecture/javacss/double_block.html 何かよい策がありましたら教えてください。お願いします。 <<ソース>> <script language="javascript"> <!-- // function submitForm() { document.formname.button.disabled = true; submitForm = disableButton; document.formname.submit(); return false; } function disableButton() { alert('処理中です。しばらくお待ち下さい。'); return false; } // --> </script> ~以下省略~ <form method="POST" form name="formname" action="test.cgi"> ----送信ボタンのコード----- <input type="image" src="images/acc_send.gif" name="send" onclick="submitForm()"> </form>

  • Form送信ボタンのダブルクリック防止処理で不思議な現象

    Perl(CGI)でHTMLタグを書いてフォームを作っています。 送信(submit)ボタンをダブルクリックする人が多く、それを防止するために色々探していたら <input type="button" value="送信" onClick="this.disabled=true; this.value='送信中'; this.form.submit();"> とすればよいとあったので早速 onClickを付け加え typeのところをsubmitからbuttonに変更しました。 そうするとうまくいったのですが、別のページを同じようにすると動きません。 よく見るとうまくいったものにはnameが入っており、実際には <input type="submit" name="button" value="送信" onClick="this.disabled=true; this.value='送信中'; this.form.submit();"> となっていました。 つまり、typeをsubmitからbuttonに変更したつもりだったのですが、間違えてtypeはそのままsubmitで、nameをbuttonに変えてしまっていたのです。 ネットで書いてあったとおりのことをしたつもりが変える箇所を間違え、結果として正常に稼働しています。 自分の環境ではこれでうまく動いているのですが、普通に考えるとnameを変えたからといってきちんと動くとは到底思えません。 なぜこのようなことになるのでしょうか。 これでいいのでしょうか。 今思いましたが、ひょっとしてnameを元々変える必要はなく、typeはあくまでsubmit、 onClick="this.disabled=true; this.value='送信中'; this.form.submit();" これを付け加えさえすればいいということなのでしょうか。 このような処理方法をしているサイトが他に見あたらなかったので、これでいいのかどうか分からず困っています。 どなたかアドバイスください。 よろしくお願いします。 なお、自分のPCはWin2000pro IE6.0SP1で、CGI稼働環境はレンタルサーバーのため詳細非公表で分からないのですが比較的メジャーな会社なのでLinux系だと思います。

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

  • 2度押し防止機能を使いたい

    スマートフォン向けホームページを作っています。 【1】 下記のjavascript では「送信ボタンの2度押しを防止」することが出来ます。 <script> function DisableButton(b) { b.disabled = true; b.value = 'Submitting'; b.form.submit(); } </script> <form action="abc.cgi" method="post""> <select name="volume"> <option selected="selected">下記から選択</option> <option>100</option> <option>200</option> <option>300</option> <input type="submit" name="SubmitButton" id="SubmitButton" value="Submit" onclick="DisableButton(this);" /> </form> ************************************** 【2】 一方、下記のフォームでは、100,200,300のいずれかを選んだ瞬間にFormアクションが開始されます。(Submitボタンが不要です) <form action="abc.cgi" method="post" name="form1"> <select name="volume" onChange="this.form.submit() "> <option selected="selected">下記から選択</option> <option>100</option> <option>200</option> <option>300</option> </form> **************************************** 私は、「Submitボタンが不要」な【2】をベースにホームページを作りたいと考えています。 【2】の問題点 【2】を通信回線が悪い場所(スマートフォンの3G回線地域など)で使用した場合、100を選択した直後に200を続けて選択すると、100+200の合計300個を購入出来てしまいます。 ●やりたいこと 一度100を選んだら、その直後に200を選んでも2回目に選んだ200は無効になるようにしたい(100しか購入できない)と考えています。 そこで、【1】のjavascriptと組み合わせようとしたのですが、うまくいきません。 (従来同様100+200が出来てしまいます) 悪い例 <script> function DisableButton(b) { b.disabled = true; b.value = 'Submitting'; b.form.submit(); } </script> <form action="abc.cgi" method="post" name="form1"> <select name="volume" onChange="this.form.submit()" onChange="DisableButton(this);"> <option selected="selected">下記から選択</option> <option>100</option> <option>200</option> <option>300</option> </form> 【質問】 【2】をベースに2度選択を無効にするためにはどうすればいいかアドバイスをお願いいたします。

  • 2度押し防止のJavascript

    先日、「買い」のボタンを押すと、100購入~800購入までがずらりと出てくるJavascriptをこちらでお教えいただきました。(ONEONE様 有難うございます) その際、「買いのボタン」の2度押し防止スクリプトも同時に組んでいただきました。 それが末尾のスクリプトになります。 質問 買いボタンの2度押し防止は出来ていますが、100購入 200購入 300購入の連続買いができてしまう状況です。 この連続買いの防止のjavascriptをご教示いただければと思います。 当方は、 <script type="text/javascript"> jQuery(function($){ $("#btn0").click(function (e) { e.preventDefault(); $("#kai").show(); $(this).prop("disabled", true); }); $("#b_btn").click(function (e) { $(this).prop("disabled", true); }); }); </script> としてみたのですが、うまく行きませんでした。よろしくお願いいたします。 *************************************************************************** 現状 (買いボタンの2度押し防止は機能しているが     100購入 200購入の連続買いができる状態) *************************************************************************** <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script> <form action="abc.cgi" method="post" name="form1" id="form1"> <button id="btn0">買い</button> <div id="kai" style="display:none"> <button id="b_btn" type="submit" name="b100" value="100">100購入</button><br> <button id="b_btn" type="submit" name="b200" value="200">200購入</button><br> <button id="b_btn" type="submit" name="b300" value="300">300購入</button><br> <button id="b_btn" type="submit" name="b400" value="400">400購入</button><br> <button id="b_btn" type="submit" name="b500" value="500">500購入</button><br> <button id="b_btn" type="submit" name="b600" value="600">600購入</button><br> <button id="b_btn" type="submit" name="b700" value="700">700購入</button><br> <button id="b_btn" type="submit" name="b800" value="800">800購入</button><br> </div> </form> <BR> <script type="text/javascript"> jQuery(function($){ $("#btn0").click(function (e) { e.preventDefault(); $("#kai").show(); $(this).prop("disabled", true); }); }); </script> ***********************************************************************

  • submitボタン上の文字とvalue=の数字

    CSS3 + HTML5 でゲームを作っています。 Formのsubmitボタンを設置する必要があるのですが、ボタン上に表示する文字とvalue=の文字を分ける必要があります。 <input type="submit" name="point" value="送信する"> 上記では本来であれば数値を入れたいvalue=に、「ボタン上に表示する文字」を入れなければならないため使えません。 <button type="submit" name="point" value="10050">購入する</button> であれば、valueに数値を置き、ボタン上に文字を置けるため当方のニーズに叶うのですが、HTML5上で見るとボタンの大きさが<input type="submit>の3分の1くらいになってしまいます。 従い<button type="submit" name="point" value="10050">購入する</button> のボタンの大きさを変更する方法がわかればいいと思いますが、この方法でなくても構いません。 HTML5上で、当方のニーズに合うボタンを作るためにはどうしたらいいでしょうか?

    • ベストアンサー
    • HTML
  • 複数ボタンのvalueを送れない

    ひとつのフォームで複数のボタンを使う方法を探していたら 次のような方法があるとのことでした。 <form method="post" name="MyForm"> <INPUT TYPE="BUTTON" VALUE="aaa" onClick="MyForm.action='hoge.cgi';MyForm.submit();"> <INPUT TYPE="BUTTON" VALUE="bbb" onClick="MyForm.action='hoge.cgi';MyForm.submit();"> </form> これで、ボタンによってVALUEを渡せるのかと思いきや、 飛んでいきませんでした・・・ 複数ボタンを用意して、ボタンによってその VALUE値を渡す方法がありませんでしょうか?

    • ベストアンサー
    • CGI

専門家に質問してみよう