- ベストアンサー
料金計算フォームの制作における計算結果の代入について
- 計算結果を変数に代入し、条件分岐による割引前の値段で計算されてしまう問題が発生しました。
- 小計を表示するための値を次の計算に代入することで問題が解決できる可能性があります。
- アドバイスをいただきたいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
実際「day_01」のselectが1つでいいのかどうか分かりませんが、 おっしゃる通りに書くとこのようになると思います。価格は適当 に設定しました。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><title>Untitled</title> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <meta http-equiv="Content-Script-Type" content="text/javascript"> <script type="text/javascript"> function PriCal(){ var obj_t1= document.form_test.time_11; var obj_t2= document.form_test.time_21; var obj_t3= document.form_test.time_31; var obj_d1= document.form_test.day_01; var price_11 = obj_t1.options[obj_t1.selectedIndex].value * obj_d1.options[obj_d1.selectedIndex].value + obj_t2.options[obj_t2.selectedIndex].value * obj_d1.options[obj_d1.selectedIndex].value + obj_t3.options[obj_t3.selectedIndex].value * obj_d1.options[obj_d1.selectedIndex].value; // 計算 // 小計を小計欄に表示 document.form_test.F_price_11.value = price_11; //Goods-1とGoods-2を両方買った場合にはその合算から455円を引く if (obj_t1.options[obj_t1.selectedIndex].value != 0 && obj_t2.options[obj_t2.selectedIndex].value != 0) {var afterOff = price_11 - 455;} //条件を満たした場合の値引き金額を変数afteroffとする //Goods-1とGoods-2を両方買わず、Goods-3だけを買った場合は値引きせず合計とする else var afterOff=obj_t3.options[obj_t3.selectedIndex].value * obj_d1.options[obj_d1.selectedIndex].value; //何も買わなければ小計欄に「0」を入力 if (price_11 <= 0) {document.form_test.F_price_11.value = 0;} //合計金額を合計欄に表示 document.form_test.F_total_all.value = afterOff; } </script> </head> <body> <form name="form_test"> Goods-1:<select name="time_11"> <option value="0">0</option> <option value="600">600</option> <option value="500">500</option> </select> Goods-2:<select name="time_21"> <option value="0">0</option> <option value="400">400</option> <option value="300">300</option> </select> Goods-3:<select name="time_31"> <option value="200">200</option> <option value="100">100</option> </select> day:<select name="day_01"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> </select> 小計<input type="text" name="F_price_11" value="0"> 合計<input type="text" name="F_total_all" value="0"> <input type=button value="計算" onclick="PriCal()"> </form> </body> </html>
その他の回答 (2)
>>No.1 訂正...orz - - script - - document.form_test.F_total_01.value = total_01; // 小計1を表示 if (obj_p1.options [obj_p1.selectedIndex].value != 0 && obj_p2.options[obj_p2.selectedIndex].value != 0) {res_01=document.form_test.F_total_01.value = total_01 - 500;} // var res_01 if (total_01 <= 0) {res_01=document.form_test.F_total_01.value = 0;} // 合計 var total_all = res_01 + res_02 + res_034; // 合計 document.form_test.F_total_all.value = total_all; // 合計を表示
補足
早速の回答ありがとうございます! なんとなく分かった気になって試してみたのですが、 うまくいきません…小計1は表示されるのですが、 小計2~4が機能しなくなってしまいました。 objの名前の付け方(?)が間違っているような・・・ 色々調べてみたのですが、初心者すぎて分かりません。 (1冊本を買おうかしら・・・) 商品が3つあって、そのうち2つを買うと値引き、 あと1つは買っても買わなくても関係ない、のですが、 それだとスクリプト変わってきますか? - - script - - var price_11 = document.form_test.time_11.options [document.form_test.time_11.selectedIndex].value * document.form_test.day_01.options [document.form_test.day_01.selectedIndex].value + document.form_test.time_21.options [document.form_test.time_21.selectedIndex].value * document.form_test.day_01.options [document.form_test.day_01.selectedIndex].value + document.form_test.time_31.options [document.form_test.time_31.selectedIndex].value * document.form_test.day_01.options [document.form_test.day_01.selectedIndex].value; // 計算 document.form_test.F_price_11.value = price_11; // 小計を表示1 if (obj_t21.options[obj_t21.selectedIndex].value != 0 && obj_t31.options[obj_t31.selectedIndex].value != 0) {res_11=document.form_test.F_price_11.value = price_11 - 455;} // var res_11 if (price_11 <= 0) {res_11=document.form_test.F_price_11.value = 0;} // 合計 var total_a = res_11 + res_12 + res_13 + res_14; // 合計 document.form_test.F_total_a.value = total_a; // 合計を表示 最初の質問とは若干変わってます。 的外れだったらごめんなさい。 よろしくお願いします。
- - HTML - - × <INPUT TYPE="text" NAME="F-total_01" VALUE="0"> ○ <INPUT TYPE="text" NAME="F_total_01" VALUE="0"> - - script - - document.form_test.F_total_01.value = total_01; // 小計1を表示 if (obj_p1.options [obj_p1.selectedIndex].value != 0 && obj_p2.options[obj_p2.selectedIndex].value != 0) {res_01=document.form_test.F_total_01.value = total_01 - 500;} // var res_01 if (total_01 <= 0) {res=document.form_test.F_total_01.value = 0;} // 合計 var total_all = res_01 + res_02 + res_034; // 合計 document.form_test.F_total_all.value = total_all; // 合計を表示
お礼
お忙しい中ご指導ありがとうございます! 何度もお手数おかけします。 やはり勉強不足なのか、なかなかうまくいきませんが、 ちょっとずつ思い通りに動くようになってきてます! これを参考に地道に作っていきたいと思います。 完成はまだまだ先になりそうですので、先に質問を締め切ります。 本当に、ありがとうございました。