• ベストアンサー

for文の中での計算

テキストボックス「原価」の値とテキストボックス「割引1~3」に入力された値をもとに テキストボックス「値段1~3」を計算するJavaScriptを作成しているのですが、 計算した値を「値段1~3」に入れようとするところでエラーが起きてしまいます。 ”i”をループカウンタとし、その値を名前にプラスしているのですが、 → XXXX+i この書き方が違うのでしょうか? 試しに、XXXX(i) や XXXX[i] でやってみましたが、うまくいきませんでした。 どのように書いたらよいのでしょうか? よろしくお願いいたします。 ************************************ <SCRIPT LANGUAGE="JavaScript"> function PriceKeisan() { var genka genka = document.myFORM.原価+i.value; var waribiki for (i=1; i<=3; i++){ waribiki= document.myFORM.割引+i.value; document.myFORM.値段+i.value = genka * waribiki / 100; ←ここでエラー } } </SCRIPT> <FORM NAME="myFORM"> <INPUT TYPE="TEXT" NAME="原価"> <INPUT TYPE="TEXT" NAME="割引1"><INPUT TYPE="TEXT" NAME="値段1"> <INPUT TYPE="TEXT" NAME="割引2"><INPUT TYPE="TEXT" NAME="値段2"> <INPUT TYPE="TEXT" NAME="割引3"><INPUT TYPE="TEXT" NAME="値段3"> <INPUT TYPE="BUTTON" onClick="PriceKeisan()" VALUE="計算"> ※説明しやすいようにテキストボックスの名前に日本語を使用しています。実際には日本語は使用しておりません。

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

  • ベストアンサー
  • nuruhho44
  • ベストアンサー率57% (38/66)
回答No.2

このようにループで連続処理させる場合、 document.フォーム名.部品名.value (フォーム名、部品名はname属性またはid属性) という記述よりも document.forms[n].elements[m].value という記述が便利です。n・m には0から始まる数値が入り、 n番目のフォームのm番目の部品の内容という意味です。 この場合<INPUT TYPE="TEXT" NAME="原価">の部分の内容は document.forms[0].elements[0].value と書けば取得できます。 数値ではややこしいという場合は、name属性やid属性を参照します。 document.forms["フォーム名"].elements["部品名"].value これを使うとご質問のようなループでの連番名の処理もできます。 waribiki = document.forms["myFORM"].elements["割引"+i].value; この場合フォームは1個だけなので、name属性をそのまま使ってもいいです。 waribiki = document.myFORM.elements["割引"+i].value; という風に書けば動作します。

asakura
質問者

お礼

回答ありがとうございます。 うまくいきました!! まだまだ勉強中が足りませんね。がんばります!

その他の回答 (1)

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

> → XXXX+i > この書き方が違うのでしょうか? こんな感じ。 > waribiki= document.myFORM.割引+i.value; n = "割引"+i; waribiki= document.myFORM.all[ n ].value; エラーが出ている行以外にも、二ヶ所きちんと動いてないです。

asakura
質問者

お礼

回答ありがとうございます。 他にもエラーがありますか・・。 がんばって探してみます!

関連するQ&A

  • for文の使い方について

    こんばんはpiyottiと申します。 forループを使用してtextの値を取得したいと思っています。 「document.myFORM.namei・・・」の「i」をループカウンターとして 「name1、name2・・・」と増やしていきたいのですがうまくいきません。 どうかよろしくお願いいたします。 <script Language="JavaScript"><!-- function calc(form) { n = 0; for (i=0; i<4; i= i+;) n += eval(document.myFORM.namei.value); } // --></script> <form name="myFORM"> 数値1:<input type="text" onChange="calc(this.form, this)" name="name1"> 数値2:<input type="text" onChange="calc(this.form, this) name="name2"> 数値3:<input type="text" onChange="calc(this.form, this) name="name3"> 数値4:<input type="text" onChange="calc(this.form, this) name="name4"><br> </form>

  • javascriptが得意な方ご教授ください。for文関連です。

    以下のソースにて?の部分を配列番号と同等にしたいのですが、うまくいきません。 やりたいことは配列のEbox_Div[0]~[3]の中にnullが入った場合その配列番号に対応するテキストボックスのEmail0~3には"空"と代入したいのです。 ※hiddenタグのEmail_hの値はTBLの状態によって異なります。 <script language="javascript"> function bunkatsu(){ var Ebox_Div = new Array(); Ebox_Div = document.myform.Email_h.value.split(","); document.myform.Email0.value = Ebox_Div[0]; document.myform.Email1.value = Ebox_Div[1]; document.myform.Email2.value = Ebox_Div[2]; document.myform.Email3.value = Ebox_Div[3]; for (i=0; i<4; i++){ if(Ebox_Div[i] == null){ document.myform.Email?.value = "空"; } } } </script> <body bgcolor="white" onLoad="bunkatsu()"> <form name="myform"> <input type="hidden" name="Email_h" value="aho,baka"> <table border="0" width="100%"> <tr><td width="10%">アドレス1</td><td width="90%"><input type="text" name="Email0" size="60"></td></tr> <tr><td width="10%">アドレス2</td><td width="90%"><input type="text" name="Email1" size="60"></td></tr> <tr><td width="10%">アドレス3</td><td width="90%"><input type="text" name="Email2" size="60"></td></tr> <tr><td width="10%">アドレス4</td><td width="90%"><input type="text" name="Email3" size="60"></td></tr> </table> よろしくお願い致します。

  • CFLOOPで計算させたいのですが(2)

    先ほどとの関連になりますが、 <SCRIPT LANGUAGE="JavaScript"> <!--JavaScript function TotalSum(i) { var evalStr = eval("document.sum" + i); with(evalStr) { if(!isNaN(text1.value) && !isNaN(text2.value) && !isNaN(text3.value) && text1.value && text2.value && twxt3.value); { text4.value = eval(text1.value) + eval(text2.value) - eval(twxt3.value); } if( !isNaN(text5.value) && !isNaN(text6.value) && text5.value && text6.value); { text7.value = eval(text4.value) + eval(text5.value) + eval(text6.value); } } } // --> </script> </head> <body> <TABLE BORDER="1"> <FORM name="myform" action="url" method="post" onSubmit="TotalSum(' + i + ');return false;"> <cfloop index="i" from="1" to="10"> <TR> <TD><input type="text" name="text1" onChange="TotalSum('+i+')" value="0"></TD> <TD><input type="text" name="text2" onChange="TotalSum('+i+')" value=""></TD> <TD><input type="text" name="text3" onChange="TotalSum('+i+')" value="0"></TD> <TD><input type="text" name="text4" onChange="TotalSum('+i+')" value="0"></TD> <TD><input type="text" name="text5" onChange="TotalSum('+i+')" value=""></TD> <TD><input type="text" name="text6" onChange="TotalSum('+i+')" value=""></TD> <TD><input type="text" name="text7" onChange="TotalSum('+i+')" value="0"></TD> </TR> </cfloop> </form> </TABLE> </body> また、見当はずれなこと言っていたらすみません。

  • プロパティ名に変数を連結する

    javascriptによるWebサイト内のフォーム内容入力チェックを行っています。 <input type="text" name="text1"> <input type="text" name="text2"> <input type="text" name="text3"> . . というように連番で付けられたフォーム部品があった場合 if(document.myForm.text1.value==""){flag=1;} if(document.myForm.text2.value==""){flag=1;} if(document.myForm.text3.value==""){flag=1;} のようにしてやれば空欄チェックが行えますが これがいくつもある場合、textの後に続く番号をfor等で 繰り返し処理によって行う場合、どのように記述するでしょうか。 試しに for(i = 0 ; i <= 100 ;i++){ var text; hoge = "document.myForm.text" + i + ".value"; if(hoge == ""){flag=1;} } のようにしましたが、この方法だとhoge自体が文字列として みなされてしまいプロパティの指定ができなくなっている(?)のでしょうか。 ご助言いただけると助かります。

  • CFLOOPで計算させたいのですが

    今、ColdfusionでWEBの構築をしているのですが、困っています。 以下のような感じで作ってみているのですがなかなかうまくいかず悩んでいます。 (1)CFLOOPをつかって表をi行作る。 (2)その行ごとに数値を入力すると自動計算される。 (3)この場合、WEBからのinputなので、数値が入力されたら即計算させたい という感じにしたいのですが、計算されず困っています。 どなたか、よろしくお願いします。 <html> <head> <title>計算<title> </head> <b<TABLE BORDER="1" cellpadding="0"> <FORM name="myform" action="url" method="post"> <cfset text1 = 0> <cfset text2 = 0> <cfset text3 = 0> <cfset text4 = 0> <cfset text5 = 0> <cfset text6 = 0> <cfset text7 = 0> <cfloop index="i" from="1" to="10"> <TR> <TD><input type="text" name="text1" size="10" value="0"></TD> <TD><input type="text" name="text2" size="10" value=""></TD> <TD><input type="text" name="text3" size="10" value="0"></TD> <TD><input type="text" name="text4" size="12" value="0"></TD> <TD><input type="text" name="text5" size="10" value=""></TD> <TD><input type="text" name="text6" size="12" value=""></TD> <TD><input type="text" name="text7" size="10" value="0"></TD> <cfset text4=evaluate(text1 + text2 - text3)> <cfset text7=evaluate(text4 + text5 + text6)> </TR> </cfloop> </form> </TABLE> </body> </html> です、よろしくお願いします。

  • javascriptによる計算

    テキストボックス「a1~6」の値とテキストボックス「b1~6」に入力された値を足し算してテキストボックス「c1~6」(例…c[i] = a[i] + b[i])を計算するJavaScriptを作成しているのですが、結果がundefinedになってしまい上手くいきません。どうやったら動くのかどうかご教授ください。 以下ソース↓ <script language ="JavaScript"> function plus() { var intResult = 0; for (i=1; i<=6; i++){ intResult[i] = 0; if (!isNaN(document.forms["A"].all["a"+i].value) && !isNaN(document.forms["B"].all["b"+i].value)){ intResult[i] += parseInt(document.forms["A"].all["a"+i].value); intResult[i] += parseInt(document.forms["B"].all["b"+i].value); } <table border = 1> <tr> <td> <table border = 1> <tr> <td> <form name="A"> <input type = "text" size = 5 name = "a1"></input> </td> <td> <input type = "text" size = 5 name = "a2"></input> </td> <td> <input type = "text" size = 5 name = "a3"></input> </td> </tr> <tr> <td> <input type = "text" size = 5 name = "a4"></input> </td> <td> <input type = "text" size = 5 name = "a5"></input> </td> <td> <input type = "text" size = 5 name = "a6"></input> </form> </td> </tr> </table> </td> <td> <table boeder = 1> <tr> <input type = "button" onClick="plus()" value = "+"></input> </tr> </table> </td> <td> <table border = 1> <tr> <td> <form name = "B"> <input type = "text" size = 5 name = "b1"></input> </td> <td> <input type = "text" size = 5 name = "b2"></input> </td> <td> <input type = "text" size = 5 name = "b3"></input> </td> </tr> <tr> <td> <input type = "text" size = 5 name = "b4"></input> </td> <td> <input type = "text" size = 5 name = "b5"></input> </td> <td> <input type = "text" size = 5 name = "b6"></input> </form> </td> </tr> </table> </td> </tr> </table> 答え <form name = "C"> <table border = 1> <tr> <td> <input type = "text" size = 5 name = "c1"></input> </td> <td> <input type = "text" size = 5 name = "c2"></input> </td> <td> <input type = "text" size = 5 name = "c3"></input> </td> </tr> <tr> <td> <input type = "text" size = 5 name = "c4"></input> </td> <td> <input type = "text" size = 5 name = "c5"></input> </td> <td> <input type = "text" size = 5 name = "c6"></input> </td> </tr> </table> </form> </body> document.C.all["c"+i].value = intResult[i]; } } </script>

  • JavaScript for文の処理

    JavaScriptでクイズの採点をしたいと思っています。 ↓のスクリプトを書いたのですが 「ページでエラーが発生しました」 という表示がステータスバーにでます。 二問とも一番下の選択肢を選んだ場合 「2点です」とアラートに表示させたいのですがどうしても、うまくいきません。 おそらくfor文内の score + document.myFORM.elements[i].value; このへんがおかしいのだと思うのですが。 どなたか修正方法をお願いします。 <HTML> <HEAD> <script Language="JavaScript"><!-- function GetScore(){ score = 0; for (i=0; i<6; i++) if (document.myFORM.elements[i].checked) score + document.myFORM.elements[i].value; alert(score+"点です"); // --></script> </HEAD> <BODY> <FORM name="myFORM">第一問:あなたは? <BR> <INPUT TYPE="RADIO" NAME="q1" ID="r1"VALUE="0"> <LABEL FOR="r1">引きこもり</LABEL> <BR> <INPUT TYPE="RADIO" NAME="q1" ID="r2" VALUE="1"><LABEL FOR="r2">立てこもり</LABEL> <BR> <INPUT TYPE="RADIO" NAME="q1" ID="r3" VALUE="1"><LABEL FOR="r3">生き残り</LABEL> <BR><BR> 第二問:あなたは? <BR> <INPUT TYPE="RADIO" NAME="q2" ID="r2_1" VALUE="0"><LABEL FOR="r2_1">引きこもり</LABEL> <BR> <INPUT TYPE="RADIO" NAME="q2" ID="r2_2" VALUE="0"><LABEL FOR="r2_2">立てこもり</LABEL> <BR> <INPUT TYPE="RADIO" NAME="q2" ID="r2_3" VALUE="1"><LABEL FOR="r2_3">オタク</LABEL> <BR><BR> <input type="button" value="採点する" onClick="GetScore()"> </FORM> </BODY></HTML>

  • 複数のラジオボタンの中から1つを選択すると、その行の5つのチェックボッ

    複数のラジオボタンの中から1つを選択すると、その行の5つのチェックボックスが有効になる方法を教えていただけないでしょうか。 1つのラジオボタンでならなんとか出来たのですが、 複数になるとどうもうまくいきません。 検索してはみたのですが、これといったものがなく質問することにしました。 以下のソースは単発で動いた時のものです。 <html> <head> <script type="text/javascript"> function checkfunc() { for(i=0; i<5; i++) { document.myform.chk1[i].disabled = !(document.myform.yesno.checked); } } </script> </head> <body onLoad="checkfunc();"> <form name="myform"> <input type="radio" name="yesno" value="1" onClick="checkfunc();">ラジオボタン <input type="checkbox" name="chk1" value="0">チェックボックス0 <input type="checkbox" name="chk1" value="1">チェックボックス1 <input type="checkbox" name="chk1" value="2">チェックボックス2 <input type="checkbox" name="chk1" value="3">チェックボックス3 <input type="checkbox" name="chk1" value="4">チェックボックス4 </form> </body> </html> 希望のイメージとしてはこんな感じです↓ ○ラジオボタン □チェックボックス □チェックボックス □チェックボックス □チェックボックス □チェックボックス ◎ラジオボタン □チェックボックス □チェックボックス □チェックボックス □チェックボックス □チェックボックス ○ラジオボタン □チェックボックス □チェックボックス □チェックボックス □チェックボックス □チェックボックス 申し訳ないのですが、どなたか教えていただけないでしょうか。

  • リセットさせるにはどうしたらいいでしょうか?

    下記のような配列のフォームでボタンを押したらテキストフォールドの値を空にしたいのですがどのように記述したらいいのでしょうか? ご教授宜しくお願いします。 <form name="myform">  <input type="text" name="no[100]" value="abc">  <input type="text" name="no[102]" value="der">  <input type="text" name="no[105]" value="ghi">            .            .           動的に増える </form> ※ document.myform.elements["no[100]"].value = ""; みたいに書けば個別には空にすることは出来たのですが。 elementsの順番で空にすることがどうしてもうまくいきません。 document.myform.elements[0][0].value = "";みたいに。 document.myForm.elements['no[]'].lengthで個数を取得して順番に空にするってことがしたいのですが、<input type="text" name="no[]" value="abc">だったらうまくいくのかもしれないですけど、no[値]があるとどうもうまくいきません。 宜しくお願いします。

  • テキストボックスの値で配列の値を求めるには?

    やりたいと思っているのは、 (1) "INPUT" の値を入力。 (2) "koteichi" は他からの参照値。 (3) "goukei"に(1)と(2)の合計値。 (4) "total" に(3)の値に該当する配列の値。 (実際には配列の値を代入した式の答え。) という流れになります。 (3)まではなんとか分かるのですが、 (4)はどのように配列の値を代入すればいいのかが 分かりません。  なにぶん最近始めた初心者なので不規則な値は配列を使えばいいと解釈したのですが、まったく使い方を間違えているのでしょうか? こういった場合は別のやり方があるのでしょうか? どなたかよろしくお願いします。 <SCRIPT language=JavaScript1.1> <!-- rank = new Array(6); rank[0]=0; rank[1]=5;[rank2]=8;[rank3]=12;rank[4]=16;rank[5]=22; function calc(){ document.myform.goukei.innerText = eval(document.myform.INPUT.value) +eval(document.myform.koteichi.value); } // --> </SCRIPT> </HEAD> <BODY> <form name="myform"> <INPUT size="20" type="text" name="INPUT" value="0" onchange="calc()"/>+<INPUT size="20" type="text" name="koteichi" value="10">=<INPUT size="20" type="text" name="goukei" value="0"> <INPUT size="20" type="text" name="total" value="0"> </FORM> </BODY>