スマートフォン向けホームページの2度押し防止機能について

このQ&Aのポイント
  • スマートフォン向けホームページでの2度押し防止機能について、以下の2つの方法があります。
  • 【1】「送信ボタンの2度押しを防止」するJavaScriptを使用する方法
  • 【2】FormのonChangeイベントを利用して、選択した項目に応じて自動的にフォームを送信する方法
回答を見る
  • ベストアンサー

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度選択を無効にするためにはどうすればいいかアドバイスをお願いいたします。

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

  • ベストアンサー
  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.2

こんにちは。 #1さんの回答で >ありがとうございます。このひとつ目のソースが、submitボタン無しでsubmit出来る根幹の部分ですので外せません、 という補足がありますが、ソースを見た限りですとその通りで、はずしてみてください。 onchange="DisableButton(this); のみにすれば希望の動きになると思います。 以下、理由 1.コンボボックスを洗濯する 2.onchangeイベントによりDisableButtonが呼ばれる 3.引数bに自分自身(select)が渡されるので、   b.dusabled = true; // これで選択できなくなる 4.フォームをsubmitする という動きになります。 しかし、要素のdisabledをtrueにすると値が送信されなくなりますので以下のようにします。 function DisableButton ( b ) { var h = document.createElement('input'); h.type = 'hidden'; h.name = b.name; h.value = b.value; b.form.appendChild ( h ); b.disabled = true; b.form.submit; } 選択されたら、動的に同じ名前のhidden要素を作成して、選択された値をセットし、 form内に追加することにより、disabledにした要素の値を送信することが出来ます。 わからないことがあったら補足ください。

tajix14
質問者

お礼

ありがとうございました。 お陰さまで対応することが出来ました。 大変助かりました。 深く御礼申し上げます。

その他の回答 (1)

  • Picosoft
  • ベストアンサー率70% (274/391)
回答No.1

ちゃんとした検証はしていませんが、ソースを見ていて気になったところを。 > <select name="volume" onChange="this.form.submit()" onChange="DisableButton(this);"> この行ですが、1つめのonChangeは不要なのでは?

tajix14
質問者

補足

ありがとうございます。このひとつ目のソースが、submitボタン無しでsubmit出来る根幹の部分ですので外せません、

関連するQ&A

  • submit

    例えば <form method="get" action="このページ自身"> <select name="type"> <option value="myA" selected>A</option> <option value="myB">B</option> <option value="myC">C</option> </select> <input type="submit" name="sbm" value="GO" /> となっていて これを onchange を用いて選択が変わったときに submit ボタンを自動で押したいのです。なおかつ submit ボタンを最初から隠したいのです。 誰か教えてください。

  • 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に渡せませんでした。 よろしくお願いいたします。

  • phpについての簡単な質問です

    下のようなphpコードを見たのですが、 (http://okwave.jp/qa/q5324570.htmlのベストアンサー) <form method="post" action="{$_SERVER["PHP_SELF"]}"> <select name="category" id="category" onchange="this.form.submit();"> <option value="0"{$selected["category"]["0"]}>A</option> <option value="1"{$selected["category"]["1"]}>B</option> <option value="2"{$selected["category"]["2"]}>C</option> <option value="3"{$selected["category"]["3"]}>D</option> </select> </form> {$selected["category"]["0"]}という部分がよくわかりません。 二次元配列みたいなものなのでしょうか? ぜひとも教えてください。

  • プルダウンメニューのselected部分のリンクをとる方法

    以前こちらで教えていただいたプルダウンメニューなのですが、 selected部分にもリンクがされてしまっているので、 これをリンクさせないようにしたいのですが、やり方がわかりません。 どなたか教えていただけますでしょうか? 宜しくお願いいたします。 ソース <form name="b" method="post" target="_blank" action="https://○○○○/reservationtop.asp"> <select name="***************" onChange="document.b.submit()"> <option selected>予約する</option> <option value="1">リンク3</option> <option value="2">リンク2</option> <option value="3">リンク3</option> </select>

  • form 内 onChange

    恐れいります。 <form>内で、もう一つ<form>を作成し、送信したいのですが、 なかなかうまくいきません。form内のformは、selectボックスで、選択時に自ページにsubmitさせるようにしたいのですが。。 <form action="./xxx.cgi" method="POST"> <input type="text" name="xxx"> <form action="./" method="POST"> <select name="YYY" onChange="this.form.submit()"> <option value="ddd">ddd <option value="eee">eee </select></form> <input type="text" name="xxx"> <input type="submit" value="送信"> </form> よろしくお願いします。

    • ベストアンサー
    • HTML
  • 複数ボタンを制御出来る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 となります) どのように改造すればいいか教えてください。 よろしくお願いいたします。

  • selectでのフォーム送信

    下記の質問で別の解決手順を思いついたのですが技術力が不足しているのでどなたか助けてください。 フォームのselectが変更されたときに、そのフォームの内容をcgiファイルに送信するようなスクリプトがどこかにありませんか。具体的には、 <form name="form1" method="get" action="・・・.cgi"> <input type="text" name="text" size=20> <select name="sele" onChange()> <option・・・ <option・・・ </select> </form> といったフォームで、onChange()のなかでform1をsubmitしたのと同じ結果になるようにJavaScriptを書き込みたいのです。 どうかよろしくお願いします。

  • 数によってボタンを有効化したい

    先日もこちらでお世話になりました。 例えばアメ玉の販売をするのにA,B,C,3種類があり、合計数がDと同じにならないと実行ボタンが押せないようにしたいのですが、うまくいきません。 <head> <SCRIPT TYPE="text/javascript"> <!-- function check(obj){ var f=obj.form; var valA=parseInt(f.A.value); var valB=parseInt(f.B.value); var valC=parseInt(f.C.value); var valD=parseInt(f.D.value); if (valA+valB+valC > valD || valA+valB > valD || valB+valC > valD || valA+valC > valD){ alert('A,B,Cの和は100以下に設定ください') if(obj.type=="select-one") obj.selectedIndex=0; else if(obj.type=="text") obj.value=0; obj.focus(); } } //--> </SCRIPT> <SCRIPT LANGUAGE="JavaScript"> <!-- function radio(valD){ if (valD.value == valA+valB+valC || valA+valB || valB+valC || valA+valC ) valD.form.submit.disabled = false; else valD.form.submit.disabled = true; } //--> </SCRIPT> </head> <body bgcolor=#ffffff> <form name="" method="post" action="shop.cgi"> <b>☆飴玉 </b> <br> <b>個数配分</b><br> A:<select name="A" onChange="check(this)" onChange="radio(this)"> <option value = '選択してください' selected>選択してください</option> <script language="javascript"> for ( var i = 0; i < 51; i++ ){ var sDat = ( "00" + i ).match( /..$/ ); document.write( "<option value = '" + sDat + ")'>" + sDat + "</option>\n" ); } </script> </select><br> B:<select name="B" onChange="check(this)" onChange="radio(this)"> <option value = '選択してください' selected>選択してください</option> <script language="javascript"> for ( var i = 0; i < 51; i++ ){ var sDat = ( "00" + i ).match( /..$/ ); document.write( "<option value = '" + sDat + ")'>" + sDat + "</option>\n" ); } </script> </select><br> C:<select name="C" onChange="check(this)" onChange="radio(this)"> <option value = '選択してください' selected>選択してください</option> <script language="javascript"> for ( var i = 0; i < 51; i++ ){ var sDat = ( "00" + i ).match( /..$/ ); document.write( "<option value = '" + sDat + ")'>" + sDat + "</option>\n" ); } </script> </select><br> D:<input type="text" name="D" readonly value="50" class="num"></br> <input type="submit" value="申し込む" name="submit" disabled> </form> </body> 詳しくわからないのですが、イベントハンドラは2つ続けて書けないのでしょうか。。。 どなたかお教え頂けたら幸いです。

  • 検索機能について

    <form action="******"method="post> 選択名<BR> <select name="数字"> <option value="1">1 <option value="2">2 <option value="3">3 </select><BR> <input type="submit" value="OK"> </form> 上のフォームで転送した時に1.2.3のページを表示できるようにしたいのですが、PHPスクリプト?を、どう書けばいいか教えて下さい。

    • ベストアンサー
    • PHP
  • フォームのドロップダウンで未選択のチェックをしたいのですが、下記のよう

    フォームのドロップダウンで未選択のチェックをしたいのですが、下記のようにしたのですがうまくいきません。・・・原因は id[1] だと思うのですが、こういう場合JavaScriptには、どのように記述すればよいのでしょうか? ※ドロップダウンの name="id[1]" は、変更できません。 よろしくお願いします。 <script language="JavaScript"> <!-- function check(){ if(document.cart_quantity.id[1].selectedIndex == 0){ alert('選択してください'); return false; } return true; } //--> </script> <form name="cart_quantity" method="post" action="" onSubmit="return check()"> <select gtbfieldid="272" name="id[1]" id="attrib-1"> <option value="1" selected="selected">選択してください</option> <option value="2">いちご</option> <option value="3">みかん</option> <option value="4">りんご</option> </select> <input type="submit" value="送信" name="submit"> </form>

専門家に質問してみよう