• 締切済み

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); // 税込合計を表示

みんなの回答

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

>エクセルのSUMのように商品1から商品1000までを計算する関数を教えていただきたい 残念ながら、SUMのような関数は用意されていないので、自分で作ることになります。 合計する値の要素に規則性があるでしょうから、それを利用してループで処理をするのが良いのではないでしょうか。  http://www.atmarkit.co.jp/ait/articles/1007/28/news102.html  http://www.site-cooler.com/kwl/jslibrary/7.htm 同じループ処理にするにしても、いくつか考え方があると思います。 例えば、 1)form1内の要素を順に見ていって、名前がgoodsで始まるセレクト要素の値を集計する。 2)1~1000までの変数iについて、form1内の名前がgoods + iの要素の値を集計する。 3)form1内のselect要素で、defaultのoption以外が選ばれているものだけを集計する。 などなど… ご提示の情報だけからではどのような考え方が最適なのかはわかりかねますが、ご質問分でご提示のコードは2)の考え方に近いと思います。 ただし、2)の場合は商品の数が変わる度にコードを修正しなければならないですし、番号が飛んでいたらエラーになるなどが予想されますので、1)や3)の考え方を取り入れて商品の数や番号が変わっても動作するような考え方で算出するようにしておくほうがよいのではないかと想像します。 それで、できたものを  function SUM(formName){ ~~ } のようにしておけば、指定form内の集計をしてくれる、SUM関数ができたことになります。

fudoh-k
質問者

お礼

fujillinさん。こんばんは。 丁寧なアドバイスをありがとうございます。 まだまだ初心者なので、時間が掛かるかと思いますが、頑張っていきます!! ありがとうございます。

関連する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; }

  • メールフォーム内の自動計算 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> --------------------------------------------------------

  • JavaSの追加計算

    function keisan(){ // 設定開始 var price1 = document.form1.kazu.value; // 合計を計算 if (price1 < 10000) { var total = parseInt(price1)*44/10000; } else { var total = parseInt(price1)*45/10000; } else if // 設定終了 document.form1.field_total.value = total; // 合計を表示 } // --> </SCRIPT> 上記に追加で*22/10000の計算を入れたいのですがどうしたらいいのですようか? 初心者なので申し訳ございませんがご教授お願い致します。

  • 計算結果を変数に代入

    とあるサービスの料金計算フォームを制作しています。 特定の場合のみ料金が割引されるので、if構文で条件分岐してみたところ、 計算結果(小計)にはうまく反映されるのですが、いくつかの小計を合計すると、 if構文で分岐する前の(つまり割り引き前の)値段で計算されてしまいます。 // 小計1 var total_01 = document.form_test.price_01.options [document.form_test.price_01.selectedIndex].value * document.form_test.goods_01.options [document.form_test.goods_01.selectedIndex].value + document.form_test.price_02.options [document.form_test.price_02.selectedIndex].value * document.form_test.goods_02.options [document.form_test.goods_02.selectedIndex].value ; // 小計1 document.form_test.F-total_01.value = total_01; // 小計1を表示 if (document.form_test.price_01.options [document.form_test.price_01.selectedIndex].value != 0 && document.form_test.price_02.options [document.form_test.price_02.selectedIndex].value != 0) {document.form_test.F-total_01.value = total_01 - 500;} // 両方で-500 if (total_01 <= 0) {document.form_test.F-total_01.value = 0;} // 合計 var total_all = total_01 + total_02 + total_034; // 合計 document.form_test.F-total_all.value = total_all; // 合計を表示 小計を表示する <INPUT TYPE="text" NAME="F-total_01" VALUE="0"> に出てきた値を、そのまま次の計算に代入できれば 解決するのではないかと思うのですが、行き詰ってしまいました。 どうかアドバイスをよろしくお願いいたします。

  • jacascriptとフォームselectメニューで計算した値を保存したい

    お世話になります。 javascriptを使った計算を勤め先で必要ということで、社内で少しパソコンに詳しいという理由で自分が手がけることになりましたorz 色々と検索しながら勉強し、ようやく思い通りのプログラムを見つけて参考にしながら実践してみたのですが、思い通りにならない箇所が一部ありまして困っています。 参考にしたのは以下のサイトなのですが、 ttp://www.tagindex.com/javascript/form/comp1b.html セレクトメニューから選んだ値を特定の数値で掛けそれを合計するという流れなのですが、このスクリプトだと、一度計算を終えると、もう一度セレクトメニューから値を選択しないと値が0になってしまっているのです。 希望としては、この選択した値を保存しておき、計算が終わってもそれ以前の選択状況のままにしておきたいんですが、どうやればできるでしょうか? <script type="text/javascript"> <!-- function keisan(){ // 設定開始 // 商品1 var price1 = document.form1.goods1.selectedIndex * 500; // 単価を設定 document.form1.field1.value = price1; // 小計を表示 // 商品2 var price2 = document.form1.goods2.selectedIndex * 1000; // 単価を設定 document.form1.field2.value = price2; // 小計を表示 // 商品3 var price3 = document.form1.goods3.selectedIndex * 3000; // 単価を設定 document.form1.field3.value = price3; // 小計を表示 // 合計を計算 var total = price1 + price2 + price3; // 設定終了 document.form1.field_total.value = total; // 合計を表示 } // --> </script> </head> <body> <form action="#" name="form1"> <table> <tr> <th>商品名</th> <th>単価</th> <th>数量</th> <th>金額</th> </tr> <tr> <td>商品サンプル1</td> <td align="right">500円</td> <td><select name="goods1" onChange="keisan()"> <option>0</option> <option>1</option> <option>2</option> <option>3</option> <option>4</option> <option>5</option> </select></td> <td><input type="text" name="field1" size="8" value="0"> 円</td> </tr> <tr> <td>商品サンプル2</td> <td align="right">1,000円</td> <td><select name="goods2" onChange="keisan()"> <option>0</option> <option>1</option> <option>2</option> <option>3</option> <option>4</option> <option>5</option> </select></td> <td><input type="text" name="field2" size="8" value="0"> 円</td> </tr> <tr> <td>商品サンプル3</td> <td align="right">3,000円</td> <td><select name="goods3" onChange="keisan()"> <option>0</option> <option>1</option> <option>2</option> <option>3</option> <option>4</option> <option>5</option> </select></td> <td><input type="text" name="field3" size="8" value="0"> 円</td> </tr> <tr> <td align="right" colspan="3"><strong>合計</strong></td> <td><input type="text" name="field_total" size="8" value="0"> 円</td> </tr> </table> </form>

  • リストから計算するJavaScript

    質問させて下さい。料金を計算するスクリプトを組みたいのですが 良くある単価×個数という形ではなく、リストAAAの中のaaaは500円、 bbbは5000円、リストBBBの中のcccは10000円、dddは15000円といった感じで 各リストの合計と総合計が出る形にしたいのです。 function totalPrice(){ var numCode01 = document.inputForm.code01.selectedIndex; var priceCode01 = 1 * numCode01; document.inputForm.code01_price.value = priceCode01; var numCode02 = document.inputForm.code02.selectedIndex; var priceCode02 = 1 * numCode02; document.inputForm.code02_price.value = priceCode02; var numCode03 = document.inputForm.code03.selectedIndex; var priceCode03 = 1 * numCode03; document.inputForm.code03_price.value = priceCode03; var total = priceCode01 + priceCode02 + priceCode03; document.inputForm.total_price.value = total; } と組んで <select name="code01" onChange="totalPrice();"> <option value="500">aaa</option> <option value="5000">bbb</option> </select> としてみたのですが、うまくいきません。基本的な知識が無いまま組んでしまったので どこが悪いのかも分かりません。どうかご助言お願いします。

  • メールの本文に入れる言葉を選んだ物によって変更したい。

    これで本文に文字を入れられるのは分るのですが、 <a href="mailto:sample@oooindex.com?subject=お問い合わせ&body=ご記入ください">メールはこちらへ</a> メールに下で選択した商品名を自動的に入力するようにしたいです。どうすれば良いでしょうか?初心者なので、お手柔らかにお願いします。 (どんなスタイルかはこのアドレスに載っています) http://www.tagindex.com/javascript/form/comp1b.html <HTML> <HEAD> <TITLE>TAG index Webサイト</TITLE> <SCRIPT TYPE="text/javascript"> <!-- function keisan(){ // 設定開始 // 商品1 var price1 = document.form1.goods1.selectedIndex * 500; // 単価を設定 document.form1.field1.value = price1; // 小計を表示 // 商品2 var price2 = document.form1.goods2.selectedIndex * 1000; // 単価を設定 document.form1.field2.value = price2; // 小計を表示 // 商品3 var price3 = document.form1.goods3.selectedIndex * 3000; // 単価を設定 document.form1.field3.value = price3; // 小計を表示 // 合計を計算 var total = price1 + price2 + price3; // 設定終了 document.form1.field_total.value = total; // 合計を表示 } // --> </SCRIPT> </HEAD> <BODY> <FORM NAME="form1"> <TABLE BORDER="1" CELLSPACING="2" CELLPADDING="2" BGCOLOR="#FFFFFF"> <TR> <TH>商品名</TH> <TH>単価</TH> <TH>数量</TH> <TH>金額</TH> </TR> <TR> <TD>商品サンプル1</TD> <TD ALIGN="right">500円</TD> <TD><SELECT NAME="goods1" onChange="keisan()"> <OPTION>0 <OPTION>1 <OPTION>2 <OPTION>3 <OPTION>4 <OPTION>5 </SELECT></TD> <TD><INPUT TYPE="text" NAME="field1" SIZE="8" VALUE="0"> 円</TD> </TR> <TR> <TD>商品サンプル2</TD> <TD ALIGN="right">1,000円</TD> <TD><SELECT NAME="goods2" onChange="keisan()"> <OPTION>0 <OPTION>1 <OPTION>2 <OPTION>3 <OPTION>4 <OPTION>5 </SELECT></TD> <TD><INPUT TYPE="text" NAME="field2" SIZE="8" VALUE="0"> 円</TD> </TR> <TR> <TD>商品サンプル3</TD> <TD ALIGN="right">3,000円</TD> <TD><SELECT NAME="goods3" onChange="keisan()"> <OPTION>0 <OPTION>1 <OPTION>2 <OPTION>3 <OPTION>4 <OPTION>5 </SELECT></TD> <TD><INPUT TYPE="text" NAME="field3" SIZE="8" VALUE="0"> 円</TD> </TR> <TR> <TD ALIGN="right" COLSPAN="3"><FONT COLOR="#FF0000"><B>合計</B></FONT></TD> <TD><INPUT TYPE="text" NAME="field_total" SIZE="8" VALUE="0"> 円</TD> </TR> </TABLE> </FORM> </BODY> </HTML>

    • ベストアンサー
    • HTML
  • 自動計算をIEとFireFoxで動かすには?

    いつもお世話になっています。 フォームに入力した値を10で割った数を答えを自動で計算して、別フォームに出力する部分で、FireFoxでは自動計算されるのですがIEでは計算が行われませんでしたx_x; 【ソース】******************************* <script type="text/javascript"> <!-- function keisan(){ // 設定開始 // 商品1 var price1 = document.form1.goods1.value / 10; // 単価を設定 document.form1.field1.value = price1; // 小計を表示 // 合計を計算 var total = price1; // 設定終了 document.form1.field_total.value = total; // 合計を表示 } *********************************** 解決方法をご教授頂けたら幸いです。 何卒よろしくお願い致します。

  • 自動計算java scriptについてご質問

    http://www.tagindex.com/javascript/form/comp1b.html に自動計算フォームがあります。ソースは以下です。 やりたいのは、商品サンプル3の行の変更です。 この行だけ、商品名と単価の欄はそのままで、数量欄のプルダウンメニューをなくして空欄にして、金額欄に常に 500 が表示され、合計に加算されるようにしたいのです。(商品サンプル3を送料に変更したいのです。送料は注文数によって変更されず、常に500円という設定です) 色々やってみたのですが、どうやってもできません。・・ どなたかアドバイスお願いいたします! <style type="text/css"> <!-- table { border-collapse: collapse; } table, th, td { border: 1px #808080 solid; } th, td { padding: 3px 10px; } th { background-color: #d3e9fa; } td { background-color: #ffffff; } td strong { color: #ff0000; } --> </style> <script type="text/javascript"> <!-- function keisan(){ // 設定開始 // 商品1 var price1 = document.form1.goods1.selectedIndex * 500; // 単価を設定 document.form1.field1.value = price1; // 小計を表示 // 商品2 var price2 = document.form1.goods2.selectedIndex * 1000; // 単価を設定 document.form1.field2.value = price2; // 小計を表示 // 商品3 var price3 = document.form1.goods3.selectedIndex * 3000; // 単価を設定 document.form1.field3.value = price3; // 小計を表示 // 合計を計算 var total = price1 + price2 + price3; // 設定終了 document.form1.field_total.value = total; // 合計を表示 } // --> </script> </head> <body> <form action="#" name="form1"> <table> <tr> <th>商品名</th> <th>単価</th> <th>数量</th> <th>金額</th> </tr> <tr> <td>商品サンプル1</td> <td align="right">500円</td> <td><select name="goods1" onChange="keisan()"> <option>0</option> <option>1</option> <option>2</option> <option>3</option> <option>4</option> <option>5</option> </select></td> <td><input type="text" name="field1" size="8" value="0"> 円</td> </tr> <tr> <td>商品サンプル2</td> <td align="right">1,000円</td> <td><select name="goods2" onChange="keisan()"> <option>0</option> <option>1</option> <option>2</option> <option>3</option> <option>4</option> <option>5</option> </select></td> <td><input type="text" name="field2" size="8" value="0"> 円</td> </tr> <tr> <td>商品サンプル3</td> <td align="right">3,000円</td> <td><select name="goods3" onChange="keisan()"> <option>0</option> <option>1</option> <option>2</option> <option>3</option> <option>4</option> <option>5</option> </select></td> <td><input type="text" name="field3" size="8" value="0"> 円</td> </tr> <tr> <td align="right" colspan="3"><strong>合計</strong></td> <td><input type="text" name="field_total" size="8" value="0"> 円</td> </tr> </table> </form>

  • 自動計算について教えてください

    http://www.tagindex.com/javascript/form/comp1b.html に自動計算フォームがあります。ソースは以下です。 やりたいのは、商品サンプル3の行の変更です。 この行だけ、商品名と単価の欄はそのままで、数量欄のプルダウンメニューをなくして空欄にして、金額欄に常に 500 が表示され、合計に加算されるようにしたいのです。(商品サンプル3を送料に変更したいのです。送料は注文数によって変更されず、常に500円という設定です) 色々やってみたのですが、どうやってもできません。・・ どなたかアドバイスお願いいたします! <style type="text/css"> <!-- table { border-collapse: collapse; } table, th, td { border: 1px #808080 solid; } th, td { padding: 3px 10px; } th { background-color: #d3e9fa; } td { background-color: #ffffff; } td strong { color: #ff0000; } --> </style> <script type="text/javascript"> <!-- function keisan(){ // 設定開始 // 商品1 var price1 = document.form1.goods1.selectedIndex * 500; // 単価を設定 document.form1.field1.value = price1; // 小計を表示 // 商品2 var price2 = document.form1.goods2.selectedIndex * 1000; // 単価を設定 document.form1.field2.value = price2; // 小計を表示 // 商品3 var price3 = document.form1.goods3.selectedIndex * 3000; // 単価を設定 document.form1.field3.value = price3; // 小計を表示 // 合計を計算 var total = price1 + price2 + price3; // 設定終了 document.form1.field_total.value = total; // 合計を表示 } // --> </script> </head> <body> <form action="#" name="form1"> <table> <tr> <th>商品名</th> <th>単価</th> <th>数量</th> <th>金額</th> </tr> <tr> <td>商品サンプル1</td> <td align="right">500円</td> <td><select name="goods1" onChange="keisan()"> <option>0</option> <option>1</option> <option>2</option> <option>3</option> <option>4</option> <option>5</option> </select></td> <td><input type="text" name="field1" size="8" value="0"> 円</td> </tr> <tr> <td>商品サンプル2</td> <td align="right">1,000円</td> <td><select name="goods2" onChange="keisan()"> <option>0</option> <option>1</option> <option>2</option> <option>3</option> <option>4</option> <option>5</option> </select></td> <td><input type="text" name="field2" size="8" value="0"> 円</td> </tr> <tr> <td>商品サンプル3</td> <td align="right">3,000円</td> <td><select name="goods3" onChange="keisan()"> <option>0</option> <option>1</option> <option>2</option> <option>3</option> <option>4</option> <option>5</option> </select></td> <td><input type="text" name="field3" size="8" value="0"> 円</td> </tr> <tr> <td align="right" colspan="3"><strong>合計</strong></td> <td><input type="text" name="field_total" size="8" value="0"> 円</td> </tr> </table> </form>

専門家に質問してみよう