質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

4回答

4636閲覧

getElementsByNameで取得した値の合計を計算するにはどうしたらいいか

syoma

総合スコア15

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

1グッド

0クリップ

投稿2018/02/08 04:58

javascriptにおけるsetKTotal()内の
total1[0].value = parseInt(ksubtotal[0].value, 10) + parseInt(ksubtotal[1].value, 10) + parseInt(ksubtotal[2].value, 10) + parseInt(ksubtotal[3].value, 10) + parseInt(ksubtotal[4].value, 10);
をより簡略にし、合計を出すにはどうしたらいいでしょうか?

ループなどを用いた具体的なコードを教えていただけるとありがたいです。

javascript

1var kprice = document.getElementsByName('k-price'); 2var ksubtotal = document.getElementsByName('k-subtotal'); 3var way = document.getElementsByName('way'); 4var total1 = document.getElementsByName('total1'); 5 6function setKTotal() { 7 "use strict"; 8 total1[0].value = parseInt(ksubtotal[0].value, 10) + parseInt(ksubtotal[1].value, 10) + parseInt(ksubtotal[2].value, 10) + parseInt(ksubtotal[3].value, 10) + parseInt(ksubtotal[4].value, 10); 9} 10function setKSubTotal() { 11 "use strict"; 12 var i; 13 for (i = 0; i < 5; i++) { 14 ksubtotal[i].value = kprice[i].value * way[i].value; 15 setKTotal(); 16 } 17}

html

1<tr class="line2"> 2<td> 3 <select name="transportation"> 4 <option value="ku"></option> 5 <option value="chika">地下鉄</option> 6 <option value="zairai">JR在来線</option> 7 <option value="shinkan">JR新幹線</option> 8 <option value="hankyu">阪急</option> 9 <option value="keihan">京阪</option> 10 </select> 11 </td> 12 <td><input type="text" name="k-price" onchange="setKSubTotal()"></td> 13 <td> 14 <select name="way" onchange="setKSubTotal()"> 15 <option value="1">片道</option> 16 <option value="2">往復</option> 17 </select> 18 </td> 19 <td><input type="text" name="k-subtotal" readonly="readonly"></td> 20</tr> 21<tr class="line1"> 22 <td></td> 23 <td></td> 24 <td class="goke">合計</td> 25 <td><input type="text" name="total1" readonly="readonly"></td> 26</tr>
退会済みユーザー👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

x_x

2018/02/08 05:06

提示コード内にすでにforがあるのでループはわかっていると思うのですが、どこでわからなくなっているでしょうか?
guest

回答4

0

js

1 var temp = 0; 2 for (var i = 0; i < 5; i++) { 3 temp += parseInt(ksubtotal[i].value, 10); 4 } 5 total1[0].value = temp;

みたいな感じではどうですか?

投稿2018/02/08 05:52

Lhankor_Mhy

総合スコア36115

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

syoma

2018/02/08 05:56

結果NaNで返されます。
Lhankor_Mhy

2018/02/08 06:08

「実はk-subtotalが6個なかった」みたいな原因がありえそうですね。
Lhankor_Mhy

2018/02/08 06:12

当方の環境では問題なく動作しました。ここに書かれていないコードが原因か、または環境の問題かもしれません。
syoma

2018/02/08 06:44

htmlでinput-textから入力された値をk-priceというnameで取得して その後、セレクトボックスで選択された数字の値に対する数字のvalueと掛け合わせたものを k-subtotalというnameのテキストボックスに代入しているので 無いことはないかと思うんですが、、、
Lhankor_Mhy

2018/02/08 06:47

k-subtotalは5個あって、それぞれに数値が表示されているということですね? 了解です。 当方の環境では問題なく動作しましたので、ここに書かれていないコードが原因かな、という気がしてます。
syoma

2018/02/10 06:34

ご回答ありがとうございます。 初期値の問題で正常な結果が出ませんでした。 問題解決しました。 ありがとうございました。
Lhankor_Mhy

2018/02/10 08:25

え、それで動くんですね。興味深いな。
guest

0

こういう感じでしょうか?

javascript

1<script> 2window.addEventListener('DOMContentLoaded', function(e){ 3 var num=Array.prototype.map.call(document.querySelectorAll('[name="k-subtotal"]'),function(x){ 4 return parseInt(x.value)||0; /*一部エラー回避処理を追記*/ 5 }).reduce(function(x,y) { 6 return x+y; 7 }); 8 console.log(num); 9}); 10</script> 11<input type="text" name="k-subtotal" value="100"> 12<input type="text" name="k-subtotal" value="150"> 13<input type="text" name="k-subtotal" value="200"> 14

※わかりやすくするためソースを結合

投稿2018/02/08 05:33

編集2018/02/08 06:50
yambejp

総合スコア114839

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

syoma

2018/02/08 05:42

試してみましたが、結果がうまくでません
yambejp

2018/02/08 05:52

わかりやすくするために結合しておきました 上記コピペでhtmlを書いてもエラーがでますか?
yambejp

2018/02/08 05:56

ちなみに「うまくでません」だと状況がわかりません OS、ブラウザの種類とバージョンを提示して どううまくいかないのか、エラー?なにも出ない?を 書いたほうが良いと想います
syoma

2018/02/08 06:02

すいません NaNと表示されます。
yambejp

2018/02/08 06:07

> NaNと表示されます。 return parseInt(x.value)||0; にしてみてください
syoma

2018/02/08 06:41

0とかえされました。
yambejp

2018/02/08 06:49

再度確認になりますが わたしの書いたソースだけをHTMLにコピペして確認して 0と表示されるのですね? (ご自身のソースに当てはめるのではなく) それと結局動作環境は提示いただけないのでしょうか?
syoma

2018/02/10 06:35

ご回答ありがとうございました。 初期値の問題でした。 ありがとうございました。
guest

0

ベストアンサー

たとえば、

total1[0].value = 0; for(var i = 0; i < ksubtotal.length; i++){ total1[0].value+=parseInt(ksubtotal[i].value, 10); }

…とかやりたい、ということですか?

以下追記:
下記の修正ソースではどうでしょう?

var sum = 0; for(var i = 0; i < ksubtotal.length; i++){ sum += parseInt(ksubtotal[i].value, 10); } total1[0].value = sum;

投稿2018/02/08 05:14

編集2018/02/08 06:20
tkturbo

総合スコア5572

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

syoma

2018/02/08 05:20

解答ありがとうございます。 おっしゃるたおりですが そのコードで実行すると たとえばノードリスト内の値が 100,1,2,3,4だとすると 結果は110ではなく 1001234となってしまうので 困っております。
tkturbo

2018/02/08 06:17

最初の「total1[0].value = 0」はちゃんといれてますか?>syomaさん
syoma

2018/02/08 06:45

いれております。
syoma

2018/02/10 06:33

total1[0].value = 0という記述ではなく、total1.value = 0で初期値を入れていました。 申し訳ございません。 訂正し、正常に動作しました。
guest

0

JavaScript

1document.addEventListener('change', function(event) { 2 var sum = 0; 3 var line2 = document.querySelectorAll('tr.line2'); 4 for (var i = 0; i < line2.length; i++) { 5 var element = line2[i]; 6 var subtotal = (parseFloat(element.querySelector('[name="k-price"]').value) || 0) * parseInt(element.querySelector('[name="way"]').value, 10); 7 element.querySelector('[name="k-subtotal"]').value = subtotal.toString(); 8 sum += subtotal; 9 } 10 11 document.querySelector('[name="total1"]').value = sum.toString(); 12}, false);

投稿2018/02/08 07:26

x_x

総合スコア13749

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問