- ベストアンサー
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="計算"> ※説明しやすいようにテキストボックスの名前に日本語を使用しています。実際には日本語は使用しておりません。
- みんなの回答 (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; という風に書けば動作します。
その他の回答 (1)
- a-kuma
- ベストアンサー率50% (1122/2211)
> → XXXX+i > この書き方が違うのでしょうか? こんな感じ。 > waribiki= document.myFORM.割引+i.value; n = "割引"+i; waribiki= document.myFORM.all[ n ].value; エラーが出ている行以外にも、二ヶ所きちんと動いてないです。
お礼
回答ありがとうございます。 他にもエラーがありますか・・。 がんばって探してみます!
お礼
回答ありがとうございます。 うまくいきました!! まだまだ勉強中が足りませんね。がんばります!