• ベストアンサー

金額に3桁ごとにカンマを入れた、入力フォームの加算が出来ない。

金額に3桁ごとにカンマを入れた、商品注文入力フォームを作りたいのですが、加算が出来ません。 困っています、どなたか教えてください。 よろしくお願いします。WinXP IE6.0を使っています。 (金額欄) 商品1×数量=商品1金額     計算OK 商品2×数量=商品2金額     計算OK (商品明細欄) 商品1 商品名+個数+商品1金額  表示OK 商品2 商品名+個数+商品2金額  表示OK 合計(商品1+商品2)は、商品2の金額しか表示しないので、困っています。 (ソースコード) function calcTotal() { var intTotalPrice = 0; var strEstimate = "\n------------------------------------------------------ \n" + "            ご注文ご明細 \n" + "------------------------------------------------------ \n"; if (document.form1.buyItem1.checked == true) { intTotalPrice= document.form1.prcItem1.value; strEstimate = strEstimate + "商品1    :" + parseInt(document.form1.NumItem1.selectedIndex + 1) + "個  " +document.form1.prcItem1.value + "円 \n"; } if (document.form1.buyItem2.checked == true) { intTotalPrice =document.form1.prcItem2.value; strEstimate = strEstimate + "商品2 :" + parseInt(document.form1.NumItem2.selectedIndex + 1) + "個  "    + document.form1.prcItem2.value + "円 \n"; } strEstimate = strEstimate + "------------------------------------------------------ \n" + "ご注文合計 "  + intTotalPrice + "円 "; document.form2.tarEstimate.value = strEstimate; }

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

  • ベストアンサー
  • gimmick
  • ベストアンサー率49% (134/270)
回答No.2

どうもカンマの除去がうまくできていないようですね。(replaceのところ) 理由はよくわからないです。テスト用のコードを書いたので、計算できるか どうか試してください。なお、#1のコードだとカンマが複数入った場合に 問題があるので修正しました。 ---------------------------------------------------------------------- <html> <head> <script language="JavaScript"><!-- function parseIntWithComma(strInt) {   var strNew = "";   for (var i = 0; i < strInt.length; i++) {     if (strInt.charAt(i) != ',') strNew += strInt.charAt(i);   }   return parseInt(strNew); } function calcTotal() {   var intTotalPrice = 0;   var strEstimate = "------------------------------------------------------ \n"     + "            ご注文ご明細 \n"     + "------------------------------------------------------ \n";   intTotalPrice += parseIntWithComma(document.form1.prcItem1.value);   intTotalPrice += parseIntWithComma(document.form1.prcItem2.value);   strEstimate = strEstimate + "ご注文合計 "  + intTotalPrice + "円 ";   document.form2.tarEstimate.value = strEstimate; } //--> </script> </head> <body> <form name="form1"> 商品1<input type="text" name="prcItem1">円<br> 商品2<input type="text" name="prcItem2">円<br> <button onclick="calcTotal()">見積もり</button> </form> <br> <form name="form2"> <textarea name="tarEstimate" cols="60" rows="10" readonly> 金額を入力してから見積もりボタンをクリックしてください。 </textarea> </form> </body> </html> ---------------------------------------------------------------------- 全角スペースでインデントしているので削除してください。

takeji123
質問者

お礼

再度のご回答、有難うございます。 加算、うまくゆきました。 助かりました。 しかし、#1でご指摘のとおり、3桁ごとの出力にはなっていませんが、ここのところを少々悩んでみます。 でも、本当に有難うございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

回答No.4

加算の方法は、gimmickさんが丁寧に書いておられるので、わかったのでよね?自分でも加算はうまくいったと書いていますよね。 加算された数値にカンマを付けるところで悩んでいるのですよね? それは、前に提示したソースのあなたが投げ出した部分が答えです。 この部分を理解せず、どのような回答を希望されているのか疑問です。

takeji123
質問者

お礼

何度も、お世話になります。 ご指摘いただいた部分を、もう一度挑戦してみました。gimmickさんのご回答に、遂にカンマが入りました。後は、予定のフォームに仕上げるだけです。 この度は、本当に有難うございました。

全文を見る
すると、全ての回答が全文表示されます。
回答No.3

>しかし、#1でご指摘のとおり、3桁ごとの出力にはなっていませんが、ここのところを少々悩んでみます。 もうこの問題も解決しましたよね? 前の質問で私が示したソースを本当に時間をかけて解析すればわかるはずですが。

takeji123
質問者

補足

過日は、大変お世話になりました。 分析の結果、判明しましたのは、function testCalc以下の部分だけで、上の部分は不明のままです(今の私には、ちょっと難しすぎます)。 でも、お答えを参考にかなり前進させていただきましたが、加算の部分でつまづいてしまいました。 あつかましいお願いですが、加算の方法を教えていただければ、有難いのですが・・・

全文を見る
すると、全ての回答が全文表示されます。
  • gimmick
  • ベストアンサー率49% (134/270)
回答No.1

これでどうでしょうか? (出力は3桁区切りになりませんが) 1つ目のif文の intTotalPrice = document.form1.prcItem1.value; を var strPrice1 = document.form1.prcItem1.value; strPrice1.replace(",", ""); intTotalPrice += parseInt(strPrice1); に変更。 同様に2つ目のif文を intTotalPrice = document.form1.prcItem2.value; を var strPrice2 = document.form1.prcItem2.value; strPrice2.replace(",", ""); intTotalPrice += parseInt(strPrice2); に変更。

takeji123
質問者

補足

早速のご回答、有難うございます。 ご指示通りやってみたのですが、 1,000円+10,000円=11円と表示されます。 お手数お掛けしまして、申し訳ありません。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Javascript 計算後の3桁区切り

    ホームページ用見積もりフォームをJavascriptで自動計算 縦に長いページで一番下に計算結果を表示 ページをスクロールしても、何時でも計算結果が見られるように、別のウィンドウ(レイヤー)でページ内に表示。 以上までは出来ました。 最後に計算結果を3桁区切りで表示させたいのですが、上手く出来ません。 お知恵をお貸しくださいませ。 Javascriptは外部参照しております。 3桁区切りのJavascriptを外部参照している同一のページに記入した方が良いか、別参照の方が良いかも教えていただければ幸いです。 以下がJavascriptのコードになります。 function keisan(){ // 設定開始 var tax = 5; // 消費税率 // 商品1 var price1 = document.form1.goods1.options[document.form1.goods1.selectedIndex].value; // 商品2 var price2 = document.form1.goods2.options[document.form1.goods2.selectedIndex].value; // 商品3 var price3 = document.form1.goods3.options[document.form1.goods3.selectedIndex].value; // 合計を計算 var total1 = parseInt(price1) + parseInt(price2) + parseInt(price3) ; // 設定終了 document.form1.field_total1.value = total1; // 合計を表示 var tax2 = Math.round((total1 * tax) / 100); document.form1.field_tax.value = tax2; // 消費税を表示 document.form1.field_total2.value = total1 + tax2; // 税込合計を表示 //右の窓に表示する金額 document.getElementById("display_account_amount").innerHTML = total1; document.getElementById("display_account_tax").innerHTML = tax2; document.getElementById("display_account_all").innerHTML = total1 + tax2; }

  • Javascript 足し算

    ホームページ用見積もりフォーム 商品の値段を合計する。 一個ずつ足しての計算で処理してるのですが、商品がかなりの数になりそうです。 エクセルのSUMのように商品1から商品1000までを計算する関数を教えていただきたいと思っています。 JavaScriptは外部参照しています。 以下がJavaScriptのコードになります。 function keisan(){ // 設定開始 var tax = 5; // 消費税率 // 商品1 var price1 = document.form1.goods1.options[document.form1.goods1.selectedIndex].value; // 商品2 var price2 = document.form1.goods2.options[document.form1.goods2.selectedIndex].value; // 商品3 var price3 = document.form1.goods3.options[document.form1.goods3.selectedIndex].value; // 合計を計算 var total1 = parseInt(price1) + parseInt(price2) + parseInt(price3); // 設定終了 document.form1.field_total1.value = editNumberSeparated(total1); // 合計を表示 var tax2 = Math.round((total1 * tax) / 100); document.form1.field_tax.value = editNumberSeparated(tax2); // 消費税を表示 document.form1.field_total2.value = editNumberSeparated(total1 + tax2); // 税込合計を表示

  • フォームの入力チェックをすると既に入力した項目が消える

    実は過去のQ&Aの中でご紹介されていた ホームページを拝見させて頂いたのですが、 残念ながら私の応用力が足りず、 上手く作ることが出来ません。 下記のように書いてみたのですが、 これでは未入力のメッセージにOKを押すと その前に入力したものが全て消えてしまいます。 何方か、正しい書き方をご教示下さいますよう 宜しくお願い申し上げます。 <script language="JavaScript"> <!-- function checkForm(){ if(document.form1.chk1.checked == false && document.form1.chk2.checked == false) { alert('チェックなし'); return false; } { flag = 0; for ( i = 0 ; i < document.form1.radiobtn.length ; i++){ if (document.form1.radiobtn[i].checked){ flag = 1; } } if (!flag){ alert('ラジオなし'); return false; } if(document.form1.sel.selectedIndex == 0){ alert('メニューなし'); document.form1.sel.focus(); return false; } if(document.form1.bun.value == ""){ alert('文字なし'); document.form1.bun.focus(); return false; } } return true; } //--> </script>

  • javaスクリプトによりフォーム入力

    javaスクリプトによりフォーム入力を製作中です。 ラジオボタン、チェックボックス、プルダウン選択を選択すると、同ページのテキストエリアにそれらを選択した時点で反映されるというものです。 html構造として table/ 項目1 項目2 項目3 項目4 ・ ・ ・ ------ テキストエリア ------ /trable となっていきます。 var copytoclip=1 function CopyAll(mytext) { var tempval=eval("document."+mytext) tempval.focus() tempval.select() if (document.all&&copytoclip==1){ therange=tempval.createTextRange() therange.execCommand("Copy") setTimeout("window.status=''",1800) } } function setChars(form) { if(form.n1[0].checked) { str1 = document.myform.n1[0].value } else if(form.n1[1].checked) { str1 = document.myform.n1[1].value } else if(form.n1[2].checked) { str1 = document.myform.n1[2].value } else { str1 = "テキストテキスト" } /*下がテキストエリアへ反映される*/ document.myform.mytext.value = "hogehoge" + str1 +・・・・ + "\n\n" } といったものです。 【苦戦しているところ】 選択項目がひとつしかない場合に、チェック項目を作成しても テキストエリアへ反映されません。 -・--・--・--・--・- また、これとは別によりいいサンプル等ありましたら、教えていただけるとありがたいです。

  • htmlフォームでチェックボックスの入力漏れを警告

    チェック必須にしたいのですが、出来ません。 以下のようにnameの所に name="kurasu[1]" と入れています。 他の処理もあるので、そのような入れ方をしています。 <input type="checkbox" name="kurasu[1]" id="kurasu1" value="1" /> <input type="checkbox" name="kurasu[5]" id="kurasu5" value="5" /> <input type="checkbox" name="kurasu[8]" id="kurasu8" value="8" /> としてあるので、以下のように if(!document.form.kurasu[1].checked && !document.form.kurasu[5].checked && !document.form.kurasu[8].checked){ として、アラートを出したいのですが、出来ません。 やはり kurasu[1] では出来ないでしょうか? 他のものは以下で処理しています。 <script type="text/javascript"> function check(){ var flag = 0; var errorMes = new Array(); var chkCount = 0; if(!document.form.tel.checked){ // 「電話番号」の記入をチェック flag = 1; errorMes.push("「電話番号」をご記入ください。\n"); } if(flag){ var n = errorMes.length; var errorStr =""; for(i=0;i<n;i++){ errorStr+= errorMes[i]; } window.alert(errorStr); // 記入漏れがあれば警告ダイアログを表示 return false; // 送信を中止 }else{ return true; // 送信を実行 } } </script>

  • メールフォーム内の自動計算 valueの値を2つの目的で使いたい

    以下の様な形で、自動計算フォームを作っています。 金額は「value=" "」から計算されているのですが、この部分は同時に使おうと思っているメール送信の商品名の部分にあたります。 このまま送信してしまうと、商品名が数字だけになってしまうのですが、何かよい方法をご存知でしょうか・・・。 メール送信のプログラムは私の方では変えられないので、出来れば以下の自動計算フォームを変える事で解決できたらと思っています。 javascriptは専門ではないのですが、こつこつ勉強中です。よろしくお願いいたします。 -------------------------------------------------------- <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Untitled Document</title> <script type="text/javascript"> <!-- function cal(){ var price1 = document.mail_form.goods1.options[document.mail_form.goods1.selectedIndex].value; var price2 = document.mail_form.goods2.options[document.mail_form.goods2.selectedIndex].value; var total = parseInt(price1) + parseInt(price2); document.mail_form.field_total.value = total; // 合計 } // --> </script> </head> <body> <form name="mail_form"> <p id="mail-form-box1"> ●商品1<br /> <select name="goods1" onChange="cal()"> <option value="100">バッグA 100円</option> <option value="200">バッグB 200円</option> <option value="300">バッグC 300円</option> </select> </p> <p id="mail-form-box2"> ●商品2<br /> <select name="goods2" onChange="cal()"> <option value="100">靴A 100円</option> <option value="200">靴A 200円</option> <option value="300">靴A 300円</option> </select> </p> 合計: $<input type="text" name="field_total" value="0"><BR> </form> </body> </html> --------------------------------------------------------

  • 価格計算フォーム作成について

    初心者です。次のような書籍注文フォームを作成しております。 (BODYタグも必要の場合お教え下さい。) CGIは借りており、テーブルの数など変更するとうまく送信できないようです。 フォームへは、各冊数、合計冊数、送料、合計金額の順に入力できるようなっております。また、実際は、書籍(1)、(2)のみ現在使用できるようなっています。 修正しているのですが、動作が正しく動いてくれない状況です、どこを変えたら正しく動作しますでしょうか? 申し訳ありませんが、なかなか解決せずご教示いただけると嬉しいです。 以下コード↓ ------------------------------------------------- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META name="GENERATOR" content="IBM WebSphere Studio Homepage Builder Version 6.5.2.0 for Windows"> <META http-equiv="Content-Style-Type" content="text/css"> <TITLE>書籍販売 メイン</TITLE> <SCRIPT language="JavaScript"> <!-- //冊数を記述(フォームを使用できるのは書籍(1)、(2)のみ。(3)~(7)は記録として残されている。) function CountBooks() { // var i1 = document.form.書籍(1).selectedIndex; // var i2 = document.form.書籍(2).selectedIndex; // var i3 = document.form.書籍(3).selectedIndex; // var i4 = document.form.書籍(4).selectedIndex; // var i5 = document.form.書籍(5).selectedIndex; // var i6 = document.form.書籍(6).selectedIndex; // var i7 = document.form.書籍(7).selectedIndex; var i1 = document.form1.elements[14].selectedIndex; var i2 = document.form1.elements[15].selectedIndex; var i3 = document.form1.elements[16].selectedIndex; var i4 = document.form1.elements[17].selectedIndex; var i5 = document.form1.elements[18].selectedIndex; var i6 = document.form1.elements[19].selectedIndex; var i7 = document.form1.elements[20].selectedIndex; //送料計算(書籍(1)(単価:300円)のみ適用。1~5冊なら160円、6冊以上なら960円。)) function GetSouryou(i1) { var iSouryou = 0; if (i1 < 1) iSouryou = 0; else if (i1<6 ) iSouryou = 160; else if (i1 < 1000) iSouryou = 960; else iSouryou = 0; } //書籍(1)の単価×冊数を計算 var ikakaku1 = document.form1.elements[14].selectedIndex; * 300; //書籍(2)の単価×冊数を計算   var ikakaku2 = document.form1.elements[15].selectedIndex; * 1000; //合計金額を計算 function GetGoukeiKinGaku(iCount,iSouryou, iKakaku1, iKakaku2) { var iGoukei = 0; iGoukei = (iSouryou * iKakaku2)+ikakaku1; iGoukei = Math.floor(iGoukei); iGoukei = Kanma(iGoukei); document.form1.elements[23].value = iGoukei; } //数値に3桁カンマを追加 function Kanma(iValue) { iValue=new String(iValue); Leng=iValue.length; if(Leng%3 == 0) Atai=Leng/3-1; else Atai=Math.floor(Leng/3); i=3; for(j=0; j<Atai; j++) { iValue=iValue.substring(0,Leng-i)+','+iValue.substring(Leng-i,Leng); Leng++; i++; i+=3; } return iValue; } //--> </SCRIPT> <STYLE type="text/css"> <!-- INPUT{ text-align : left; } .TEXT_RIGHT{ text-align : right; } .style1 {font-size: 2} --> </STYLE> </HEAD> -----------------------------------------------------------

  • evalで数値に変換してる筈なのですが・・・NaN

    今、JavaScriptを勉強中なのですが… Nanと言う表示が出てしまうと言う事は数値じゃないと言う事ですよね? どうしても一人の力では脱出できませんのでお助けください! どなたか是非ご教授よろしくお願いします。 var item=["N-01ネックレス","N-02ネックレス","EA-01イヤリング","KS-01携帯ストラップ"]; var g=[10,15,20,30]; var p=[1000,800,600,600]; function n01(){ var gtotal=0; var guram=0; for(a=0;a<4;a++) { if(document.form.elements[a].checked){ document.form.elements[11+(a*3)].value=item[a]; guram=eval(document.form.elements[12+(a*3)].value=g[a]); price=eval(document.form.elements[13+(a*3)].value=p[a]); }else{ document.form.elements[11+(a*3)].value=""; guram=eval(document.form.elements[12+(a*3)].value=0); price=eval(document.form.elements[13+(a*3)].value=0); } gtotal=gtotal+guram[a]; } document.form.elements[23].value=gtotal; }

  • 他フォームの入力データの引継ぎ

    入力フォームを2つ用意し 第1フォームの入力欄の1部を第2フォームの入力欄のデータとして submitさせたいのですが <INPUT TYPE="radio">と<SELECT>の入力値がうまく引継げません。 下記のようなJavaスクリプトとHTMLなのですが Javaスクリプトで「value」を=にすると 「radio」のほうはundefin、 「SELECT」で複数選択した場合は、一つ目の選択肢のみしか 引継げませんでした。 Javaスクリプトでうまくいく方法がありましたら ご教示ください。 ----Javaスクリプト-------------------------------- function aaa() { document.FROM2.A.value = document.FROM1.A.value; document.FROM2.B.value = document.FROM1.B.value; document.FROM2.C.value = document.FROM1.C.value; document.FROM2.submit(); } ----HTML-------------------------------- <FORM NAME="FROM1" METHOD="POST" ACTION="***"> <SELECT NAME="A" MULTIPLE> <OPTION VALUE="aa">セレクトa <OPTION VALUE="bb">セレクトb <OPTION VALUE="cc">セレクトc <OPTION VALUE="dd">セレクトd </SELECT> <INPUT TYPE="radio" NAME="B" VALUE="" CHECKED>選択なし <INPUT TYPE="radio" NAME="B" VALUE="1" CHECKED>ラジオ1 <INPUT TYPE="radio" NAME="B" VALUE="2" CHECKED>ラジオ2 <INPUT TYPE="text" NAME="C"> <INPUT TYPE="text" NAME="D"> <INPUT TYPE="submit" NAME="OK_BTN" VALUE="OK"> </FORM> <FORM NAME="FROM2" METHOD="POST" ACTION="***"> <INPUT TYPE="hidden" NAME="A"> <INPUT TYPE="hidden" NAME="B"> <INPUT TYPE="hidden" NAME="C"> <INPUT type="button" onClick="JavaScript:aaa();" name="OK_BTN" value="OK"> </FORM>

  • チェックボックスとの連動

    白黒とカラーの項目を連動させています。例えば白黒のチェックをはずしてカラーにチェックを入れるとすでに白黒で選択してた場合、金額が合計に加算されてしまいます。チェックをはずした時点で選択項目の金額をリセットさせたいのですが解決方法が見つかりません。Javascript勉強中で正直よくわかっていません。下記スクリプトもあっちこっち調べながら組み合わせたものです。解決策をいただけると助かります。よろしくお願い致します。 <script language="javascript"> <!-- n_table1 = new Array(0,100,200); n_table2 = new Array(0,300,400); function keisan(obj) { var outStr=""; var total=0; total = total + n_table1[document.form1.koumoku1.selectedIndex] * document.form1.kazu1.value; total = total + n_table2[document.form1.koumoku2.selectedIndex] * document.form1.kazu1.value; outStr = total; document.form1.goukei.value=eval(outStr); } function ctrl_check01(check02_checked) { document.getElementsByName("idcheck2")[0].disabled = check02_checked; document.getElementsByName("koumoku2")[0].disabled = check02_checked; } function ctrl_check03(check04_checked) { document.getElementsByName("idcheck")[0].disabled = check04_checked; document.getElementsByName("koumoku1")[0].disabled = check04_checked; } // --> </script> <form name="form1" METHOD="POST"> <table cellspacing="0" cellpadding="8" border="1" bordercolor="#666"> <tr> <td>白黒</td> <td><input type=checkbox name="idcheck" id="idcheck" onClick="ctrl_check01(this.checked);"> 白黒 <select name="koumoku1"> <option>選択 <option>--------------A(100) <option>--------------B(200) </select> </tr> <tr> <td>カラー</td> <td><input type=checkbox name="idcheck2" id="idcheck2" onClick="ctrl_check03(this.checked);"> カラー <select name="koumoku2"> <option>選択 <option>--------------A(300) <option>--------------B(400) </select></td> </tr> <tr> <td colspan="2"></td> </tr> <tr> <td>総枚数</td> <td><input type="text" name="kazu1" size="8" maxlength="12" value="0"> 枚</td> </tr> <tr> <td colspan="2"></td> </tr> <tr> <td>合計</td> <td><input type="text" name="goukei" size="8" maxlength="12" value="0"> 円</td> </tr> </table> <input type="button" value="計算する" onClick="keisan(this.form)"> </form>