電子書籍の厳選無料作品が豊富!

自分の力ではどうしようもなく、ご質問させてください。

2つ以上のテキストボックス(A,B) に数を入力して、その和を(C)以上にならないように制限をしたいのですが、JavaScriptで可能でしょうか。

またテキストボックスA,Bはセレクトボックスで書き出したく思っています。

解り難くて申し訳ありません

A 回答 (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>
    • good
    • 0
この回答へのお礼

ありがとうございます!!

イメージしていたものが完璧にできそうです!
凄いお力をお持ちで、敬服致します。

実は昨日一日頑張ってみましたが、やはり自分の実力では難しいと痛感しておりました。。。

本当に助かりました、有難うございます!

お礼日時:2007/06/23 15:11

微妙にわかりにくいのですが・・・


とりあえず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>

この回答への補足

ありがとうございます!
丁度スクリプトに向かいながら、専門書を眺めていた所でした。。。

すごいです!徐々にイメージに近づいていますが、
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以上にならないように計算したいと思っています。
いろいろ申し訳ありません。自分でも頑張ってみます

補足日時:2007/06/22 12:07
    • good
    • 0

>テキストボックス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>
    • good
    • 0
この回答へのお礼

ありがとうございます!
足りない説明の中、ご理解頂きまして感謝しています!!

今度は自分で探してきたスクリプトと合成したく、悩んでおります
若しお時間あればお教え頂ければ幸いです。

<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以下になる。。。と言うのは、不可能でしょうか。

お礼日時:2007/06/22 09:52

よくわかりませんねえ。


>2つ以上のテキストボックス(A,B)
2つ以上とはなんですか?

>その和を(C)以上にならないように
Cはどうやって決めるの?

>JavaScriptで可能でしょうか。
可能です。

>テキストボックスA,Bはセレクトボックスで書き出したく
テキストボックスを書き出すわけ?
それとも、
テキストボックスに数値をコピーするわけ?
というか、
セレクトボックスに数字は出るわけだけど、二重に表示した
いってこと?

>ご質問させてください。
自分に敬語使ってどうしますか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!