自動計算フォームAタイプ
-
0 名前: あやこ : 2005/08/28 21:47
- すいません、良かったら教えてください。
サンプルにもある、自動計算フォームAタイプを応用してフォームを作成しているのですが、
商品が20以上あるため、手作業するのは全く問題ないのですが、スクリプトが長くなって
しまいます。このような場合、何か他のスクリプト等、いい方法はないでしょうか?
-
1 名前: m035 : 2005/08/28 21:47
- <SCRIPT TYPE="text/javascript">
<!--
function keisan(){
//設定開始
var tax=5;//消費税率
var num=3;//商品数
var pr=new Array(500,1000,3000);//new Array(商品1の単価,商品2の単価,商品3の単価,・・・);
var total=0;
for(i=1;i<num+1;i++){
var price=document["form1"]["goods"+i].selectedIndex*pr[i-1];//個数×単価
document["form1"]["field"+i].value=price;//各商品の小計を表示
total+=price;// 合計を計算
}
document.form1.field_total1.value=total;//合計を表示
var tax2=Math.round((total*tax)/100);
document.form1.field_tax.value=tax2//消費税を表示
document.form1.field_total2.value=total+tax2;//税込合計を表示
}
// -->
</SCRIPT>
例えば上記のソースをサンプル自動計算フォームAタイプの<SCRIPT>〜</SCRIPT>と入れ替えてみてください。
ちゃんと動作することが分かります。(当方のテスト環境はIE6とFireFoxですがほとんどのブラウザで動きます)
例えば上記のスクリプトでは自動計算フォームAタイプの合計金額をtotalに順番に足しています。
このように名前1、名前2、名前3・・・と連番になっているフォームの内容は
document["form名"]["名前"+i].value;
で値をgetすることが出来ます。
そして、商品が20以上とのことですので
var num=3;//商品数
を(例えばvar num=20;などに)変更し、
var pr=new Array(商品1の単価,商品2の単価,商品3の単価,・・・);
の形でprに単価を書いてください。
(例えば、var pr=new Array(50,70,20,500,250,3000,650,6980,1750,2000);のように)
ソースを以上の方法で変更すれば商品がいくつになっても計算可能です。
<body>〜</body>にもtextフォームとかselectを書き足さなければいけませんが。
もちろんサンプル自動計算フォームAタイプの形そのままで個数を増やした場合です。
ですが、フォームについている名前を変更し、同じ構成にすれば別のソースでも動くと思います。
↓これとは違う値の取得法が書いてあるので参考に。
http://okweb.jp/kotaeru.php3?q=1457032
-
2 名前: あやこ : 2005/08/28 21:47
- ありがとうございました!
動きました。この方がメンテナンスが楽ですね。
助かりました。
-
3 名前: あやこ : 2005/08/28 21:47
- すいません、また教えて下さい。
上記の計算表+チェックボックス+ドロップダウンメニューを追加した親ページフォームの
ー選択されたチェックボックス
ードロップダウンメニューで選ばれた内容
ー自動計算された金額
この3点を次の子ページに表示させるにはどうすればいいのでしょうか?
-
4 名前: m035 : 2005/08/28 21:47 [URL]
- スイマセン。仕事のほうがかなりやばいことになってまして、
最近、Netにアクセスできず、回答がかなり遅延してますが、お許しください。
それで、別ページにデータを表示させるには
location.href="別ページURL"+"?"+deta1+","+deta2;
のようにしてアドレスにデータをくっつけて、そのアドレスにジャンプします。
なお、ジャンプ先のページで、URLからデータを抜き出し、フォームに対応させます。
var d=location.href.split('?');
d=d[1].split(',');
var fv=document.Myform;
fv.txt.value=d[0];
fv.check.selectedIndex=d[1];
//フォーム名Myformにテキストボックスtxtとセレクトボックスcheckがある場合
//もし、実際のフォームではなく選択内容を表示なら、
//データ入り配列名[d[i]]とでもして、データを取り出し、書き出せばいいかと思います。