アプリ版:「スタンプのみでお礼する」機能のリリースについて

以下のようなコードがあります
<script type="text/javascript">
<!--
function keisan1(FRM){
// ################ 販売価格欄計算 ###############
//コンマを外す
txt = 5; // テキストボックスの数
for(i=0; i<txt; i++) {
if(FRM.elements[i].value != "") {
FRM.elements[i].value = FRM.elements[i].value.replace( /,/g, '');}
}

//数字かどうかチェック
for(i=0; i<txt; i++) {
if (FRM.elements[i].value.match(/[\D]/g)){
window.alert("今入力した文字が不正です。半角数字で入力してください。");
return(false); // 計算中止
}
}
//本体価格欄の計算する
txt = 4; // 計算するテキストボックスの数
ttl = FRM.hk5.value*0;
for(i=0; i<txt; i++) {
if(FRM.elements[i].value != "") {
ttl += eval(FRM.elements[i].value);}
}
FRM.hk5.value = ttl-(FRM.hk2.value*2);

//コンマ処理
txt = 5; // コンマをつけるテキストボックスの数
for(i=0; i<txt; i++) {
if(FRM.elements[i].value != "") {
FRM.elements[i].value = FRM.elements[i].value.replace( /,/g, '').replace( /((?:^[-+])?\d{1,3})(?=(?:\d\d\d)+(?!\d))/g, '$1,');}
}

}//############## 販売価格計算ここまで ###############

こういった感じのものが 4つあります
で それぞれの合計額を 最後にたして総合計したいのですが

まず それぞれの呼び出しが別々のフォームになっていまして
HTMLは
<form name="rei1">
onclick="keisan1(this.form)"
</form>
と言う感じで keisan1から4まで作りました
また、HTMLもフォーム名 rei1からrei4まであります

総合計計算をするときに
onclick="sougoukei()"
として念のため各項目の合計計算(小計を出す感じです)し直してから
各項目をたして総合計にしたいのですが
function sougoukei(){
keisan1();
keisan2();
keisan3();
keisan4();
ここから各小計をたして総合計を出す
}

としたいのですが うまくいきません
( )の中に何か書かないといけないようなんですが
this.form でも合計が出ない
FRMとうっても 
FRM.elements[...]はnullかオブジェクトではないと言う感じのエラー
が出ます

それぞれの小計計算はうまく動いています。

何をどうしたらうまくいくのかよく分かりません
どなたかご教授お願いします

よろしくお願いします

A 回答 (7件)

どうかしてる!<俺


合計が正しく表示されなかった。;_;

<html>
<body>
<div id="a">
<form id="frm1">
1.<input type="text" class="chknum keta3 pr"><br>
2.<input type="text" class="chknum keta3 pr"><br>
3.<input type="text" class="chknum keta3 pr"><br>
4.<input type="text" class="chknum keta3 pr"><br>
G.<input type="text" class="chknum keta3 shoukei">
<input type="button" value="計算" onclick="shoukei(this.form)">
</form>
<form id="frm2">
1.<input type="text" class="chknum keta3 pr"><br>
2.<input type="text" class="chknum keta3 pr"><br>
3.<input type="text" class="chknum keta3 pr"><br>
4.<input type="text" class="chknum keta3 pr"><br>
G.<input type="text" class="chknum keta3 shoukei">
<input type="button" value="計算" onclick="shoukei(this.form)">
</form>

</div>
<form>
<input type="text" id="go">
<input type="button" value="計算" onClick="goukei()">
</form>
<script>
var total=0;
function shoukei(f){
var o=f.elements, m=o.length, k=0;
for(var i=0;i<m;i++){
if(o[i].className.match(/chknum/)) if(o[i].value.match(/[^,\d,]/)) {alert('不正');return; }
if(o[i].className.match(/pr/)) k+=(o[i].value.replace(/,/g,'')-0);
if(o[i].className.match(/keta3/)) o[i].value=co3(o[i].value);
if(o[i].className.match(/shoukei/)) { o[i].value=co3(k); total+=(k-0);}
}
}
function goukei(){
total=0;
var fm=document.getElementById('a').getElementsByTagName('form'),m=fm.length;
for(i=0;i<m;i++) shoukei(fm[i]);
document.getElementById('go').value=co3(total);
}
function co3(s){var n=new String(s).replace(/,/g,'');while(n!=(n=n.replace(/^(-?\d+)(\d{3})/,'$1,$2')));return n;}
</script>
</body></html>
    • good
    • 0

FRM.hk5.value = ttl-(FRM.hk2.value*2);


この処理が抜けてた!
しかも何のためなのかわかりません。
    • good
    • 0

<form id="frm2">


だね~。たびたび訂正。
どうも朝は頭がまわらん!
    • good
    • 0

訂正12行目<form id"=frm2">


本当はidを振らなくても計算してるけどね・・
    • good
    • 0

<html>


<body>
<div id="a">
<form id"=frm1">
1.<input type="text" class="chknum keta3 pr"><br>
2.<input type="text" class="chknum keta3 pr"><br>
3.<input type="text" class="chknum keta3 pr"><br>
4.<input type="text" class="chknum keta3 pr"><br>
G.<input type="text" class="chknum keta3 shoukei">
<input type="button" value="計算" onclick="shoukei(this.form)">
</form>
<form id"=frm1">
1.<input type="text" class="chknum keta3 pr"><br>
2.<input type="text" class="chknum keta3 pr"><br>
3.<input type="text" class="chknum keta3 pr"><br>
4.<input type="text" class="chknum keta3 pr"><br>
G.<input type="text" class="chknum keta3 shoukei">
<input type="button" value="計算" onclick="shoukei(this.form)">
</form>

</div>
<form>
<input type="text" id="go">
<input type="button" value="計算" onClick="goukei()">
</form>
<script>
var total=0;
function shoukei(f){
var o=f.elements, m=o.length, k=0;
for(var i=0;i<m;i++){
if(o[i].className.match(/chknum/)) if(o[i].value.match(/[^,\d,]/)) {alert('不正');return; }
if(o[i].className.match(/pr/)) k+=(o[i].value.replace(/,/g,'')-0);
if(o[i].className.match(/keta3/)) o[i].value=co3(o[i].value);
if(o[i].className.match(/shoukei/)) o[i].value=co3(k); total+=k;
}
}
function goukei(){
total=0;
var fm=document.getElementById('a').getElementsByTagName('form'),m=fm.length;
for(i=0;i<m;i++) shoukei(fm[i]);
document.getElementById('go').value=co3(total);
}
function co3(s){var n=new String(s).replace(/,/g,'');while(n!=(n=n.replace(/^(-?\d+)(\d{3})/,'$1,$2')));return n;}
</script>
</body></html>
    • good
    • 0

vat total;


function sougoukei(){
total=0;
各処理..
}

でも短いプログラムが好きな俺としては、長いかな~
小計の計算サブルーチンは、工夫すると1つでまかなえると思ふ。
name は使わず id を!
    • good
    • 0

vat total=0;


function sougoukei(){
keisan1(document.getElementById('frm1'));
keisan2(document.getElementById('frm2'));
keisan3(document.getElementById('frm3'));
keisan4(document.getElementById('frm4'));
ここから各小計をたして総合計を出す
}
各フォームには
<form id="frm1">としてidをふる

各 keisan?()の関数の中で小計が計算できたら
total+=小計額;
で加算する

ということで total に合計が代入!
    • good
    • 0
この回答へのお礼

できました!
何度も回答ありがとうございます

全部きちんと動いたときには 感動しました
ありがとうございます

またご縁がありましたら これに懲りずよろしくお願いします

お礼日時:2008/09/18 23:26

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