• ベストアンサー

入力を制限したい

自分の力ではどうしようもなく、ご質問させてください。 2つ以上のテキストボックス(A,B) に数を入力して、その和を(C)以上にならないように制限をしたいのですが、JavaScriptで可能でしょうか。 またテキストボックスA,Bはセレクトボックスで書き出したく思っています。 解り難くて申し訳ありません

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

なるほどようやく意味がわかってきました そういうことであればAもBもセレクトボックスなのですね。 もとスクリプトでは日付関数をつかっているので 日付31(or月末日)をこえると1日にもどっています。 飴の個数に日付けをつかうことはないので、単純に 日付処理の部分をはずしてしまって大丈夫です こんなかんじでしてみてください <HEAD> <style type="text/css"> input.num{ text-align:right; } </style> <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); if (valA+valB > valC){ alert('AとBの和はC以下にしてください') if(obj.type=="select-one") obj.selectedIndex=0; else if(obj.type=="text") obj.value=0; obj.focus(); } } function checkForm(f){ var flag = true; if(f.post1.value.match(/[^0-9]+/)) flag = false; if(!flag) window.alert('数字以外が入力されています'); return flag; } </SCRIPT> </HEAD> <BODY> <FORM METHOD="POST" ACTION="*****.cgi" NAME="form1" onSubmit="return checkForm(this)"> 〒:<INPUT TYPE="text" NAME="post1" SIZE="4" maxlength="3">(半角数字で) <BR> A:<select name="A" onChange="check(this)"> <option value = '選択してください' selected>選択してください</option> <script language="javascript"> for ( var i = 0; i < 100; i++ ){ var sDat = ( "00" + i ).match( /..$/ ); document.write( "<option value = '" + sDat + ")'>" + sDat + "</option>\n" ); } </script> </select><br> B:<select name="B" onChange="check(this)"> <option value = '選択してください' selected>選択してください</option> <script language="javascript"> for ( var i = 0; i < 100; i++ ){ var sDat = ( "00" + i ).match( /..$/ ); document.write( "<option value = '" + sDat + ")'>" + sDat + "</option>\n" ); } </script> </select><br> C:<input type="text" name="C" readonly value="100" class="num"></br> <INPUT TYPE="submit" VALUE="送信"> </FORM> </BODY>

josephat
質問者

お礼

ありがとうございます!! イメージしていたものが完璧にできそうです! 凄いお力をお持ちで、敬服致します。 実は昨日一日頑張ってみましたが、やはり自分の実力では難しいと痛感しておりました。。。 本当に助かりました、有難うございます!

その他の回答 (3)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

微妙にわかりにくいのですが・・・ とりあえずAをテキストボックスからセレクトボックスに変えたバージョンです。 基本的には前回と同じで、セレクトボックスを使った場合のデータクリアの 仕方が若干ことなります。 <HEAD> <style type="text/css"> input.num{ text-align:right; } </style> <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); if (valA+valB >= valC){ alert('AとBの和はC以下にしてください') if(obj.type=="select-one") obj.selectedIndex=0; else if(obj.type=="text") obj.value=0; obj.focus(); } } function checkForm(f){ var flag = true; if(f.post1.value.match(/[^0-9]+/)) flag = false; if(!flag) window.alert('数字以外が入力されています'); return flag; } </SCRIPT> </HEAD> <BODY> <FORM METHOD="POST" ACTION="*****.cgi" NAME="form1" onSubmit="return checkForm(this)"> 〒:<INPUT TYPE="text" NAME="post1" SIZE="4" maxlength="3">(半角数字で) <BR> A:<select name="A" onChange="check(this)"> <option value = '選択してください' selected>選択してください</option> <script language="javascript"> for ( var i = 0; i < 101; i++ ){ var d = new Date(0); d.setDate( d.getDate() + i ); var sDat = ( "00" + d.getDate() ).match( /..$/ ); document.write( "<option value = '" + sDat + ")'>" + sDat + "</option>\ n" ); } </script> </select><br> B:<input type="text" name="B" value="0" onChange="check(this)" class="num"></br> C:<input type="text" name="C" readonly value="100" class="num"></br> <INPUT TYPE="submit" VALUE="送信"> </FORM> </BODY>

josephat
質問者

補足

ありがとうございます! 丁度スクリプトに向かいながら、専門書を眺めていた所でした。。。 すごいです!徐々にイメージに近づいていますが、 A:<select name="A" onChange="check(this)"> <option value = '選択してください' selected>選択してください</option> <script language="javascript"> for ( var i = 0; i < 101; i++ ){ var d = new Date(0); d.setDate( d.getDate() + i ); var sDat = ( "00" + d.getDate() ).match( /..$/ ); document.write( "<option value = '" + sDat + ")'>" + sDat + "</option>\ n" ); } の部分、オブジェクト!? var d = new Date(); になっているからかもしれませんが、1~31の数字でまた1に戻ってしまいます。 この場合はArrayを使えばいいのでしょうか。。。 この値を変更すると、私の力では動かなくなってしまいます。。。 やりたい事はA、Bの飴2種類を混ぜて最大100個注文する感じです。 それをプルダウンで数を選択したいのですが、AとBの和をC以上にならないように計算したいと思っています。 いろいろ申し訳ありません。自分でも頑張ってみます

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

>テキストボックスA,Bはセレクトボックスで書き出したく については何がやりたいのかわかりませんが、入力制限というと 以下のようになるかと思います。 <style type="text/css"> input{ text-align:right; } </style> <script language=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); if (valA+valB >= valC){ alert('AとBの和はC以下にしてください') obj.value=0; obj.focus(); } } </script> <form> A:<input type="text" name="A" value="0" onChange="check(this)"></br> B:<input type="text" name="B" value="0" onChange="check(this)"></br> C:<input type="text" name="C" readonly value="100"></br> </form>

josephat
質問者

お礼

ありがとうございます! 足りない説明の中、ご理解頂きまして感謝しています!! 今度は自分で探してきたスクリプトと合成したく、悩んでおります 若しお時間あればお教え頂ければ幸いです。 <HEAD> <SCRIPT TYPE="text/javascript"> <!-- function check(){ var flag = 0; if(document.form1.post1.value.match(/[^0-9]+/)){ flag = 1; } if(flag){ window.alert('数字以外が入力されています'); return false; } else{ return true; } } // --> </SCRIPT> </HEAD> <BODY> <FORM METHOD="POST" ACTION="*****.cgi" NAME="form1" onSubmit="return check()"> 〒:<INPUT TYPE="text" NAME="post1" SIZE="4" maxlength="3">(半角数字で) <BR> <select name="A" size="1" value="$A$"> <option value = '選択してください' selected>選択してください</option> <script language="javascript"> for ( var i = 0; i < 101; i++ ){ var d = new Date(0); d.setDate( d.getDate() + i ); var sDat = ( "00" + d.getDate() ).match( /..$/ ); document.write( "<option value = '" + sDat + ")'>" + sDat + "</option>\n" ); } </script> </select> <INPUT TYPE="submit" VALUE="送信"> </FORM> </BODY> 上記で解りますでしょうか。 ご回答頂いたA:<input type="text" の部分を<select>で表示したく、かつA&Bの和はC以下になる。。。と言うのは、不可能でしょうか。

  • ANASTASIAK
  • ベストアンサー率19% (658/3306)
回答No.1

よくわかりませんねえ。 >2つ以上のテキストボックス(A,B) 2つ以上とはなんですか? >その和を(C)以上にならないように Cはどうやって決めるの? >JavaScriptで可能でしょうか。 可能です。 >テキストボックスA,Bはセレクトボックスで書き出したく テキストボックスを書き出すわけ? それとも、 テキストボックスに数値をコピーするわけ? というか、 セレクトボックスに数字は出るわけだけど、二重に表示した いってこと? >ご質問させてください。 自分に敬語使ってどうしますか?

関連するQ&A