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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

3回答

1944閲覧

ラジオボタン選択で合計を表示

megumig

総合スコア15

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2021/06/23 01:12

やりたいこと

商品の金額を一覧で計算する見積りを作成したいと考えています。
ラジオボタンがチェックされた項目の値の合計金額を計算して出力したいです。

発生している問題・エラーメッセージ

合計金額が計算されない状態です。

該当のソースコード

html

1 <form name="estimate"> 2 <div class="wrap"> 3 4 <h3 class="head_bath mt50">AAA見積り</h3> 5 6 <table class="tbl_bath"> 7 <tbody> 8 <tr> 9 <th scope="row">見出し</th> 10 <td> 11 <input type="radio" name="aaa1" value="10000"> AAA1-1 12 <input type="radio" name="aaa1" value="10000"> AAA1-2 13 </td> 14 </tr> 15 <tr> 16 <th scope="row">見出し</th> 17 <td><input type="radio" name="aaa2" value="10000"> 18 AAA2-1 19 <input type="radio" name="aaa2" value="10000"> 20 AAA2-2 </td> 21 </tr> 22 <tr> 23 <th scope="row">見出し</th> 24 <td><input type="radio" name="aaa3" value="10000"> 25 AAA3-1 26 <input type="radio" name="aaa3" value="10000"> 27 AAA3-2 </td> 28 </tr> 29 </tbody> 30</table> 31 32 33 <h3 class="head_wc mt50">BBB見積り見積り</h3> 34 <table class="tbl_wc"> 35 <tbody> 36 <tr> 37 <th scope="row">見出し</th> 38 <td> 39 <input type="radio" name="bbb1" value="10000"> BBB1-1 40 <input type="radio" name="bbb1" value="20000"> BBB1-2 41 </td> 42 </tr> 43 <tr> 44 <th scope="row">見出し</th> 45 <td><input type="radio" name="bbb2" value="10000"> 46 BBB2-1 47 <input type="radio" name="bbb2" value="20000"> 48 BBB2-2 </td> 49 </tr> 50 <tr> 51 <th scope="row">見出し</th> 52 <td><input type="radio" name="bbb3" value="10000"> 53 BBB3-1 54 <input type="radio" name="bbb3" value="20000"> 55 BBB3-2 </td> 56 </tr> 57 <tr> 58 <th scope="row">オプション</th> 59 <td> 60 <input type="radio" name="option[]" value="10000"> ※オプションご希望の方 61 </td> 62 </tr> 63 </tbody> 64</table> 65 66<div class="total_box"> 67 合計金額: <input type="text" name="total" value="0">68</div> 69 70 </div> 71 </form> 72 73

javascript

1<script> 2//AAAクリック 3var aaa_check = document.getElementsByName('aaa[i]'); 4for(i=0;i<aaa_check.length;i++){ 5 aaa_check[i].addEventListener('click', function(e){ 6 price_sum(); 7 }); 8} 9//BBBクリック 10var bbb_check = document.getElementsByName('bbb[i]'); 11 12for(i=0;i<tbbb_check.length;i++){ 13 bbb_check[i].addEventListener('click', function(e){ 14 price_sum(); 15 }); 16} 17//option 18var option_check = document.getElementsByName('option[]'); 19for(i=0;i<option_check.length;i++){ 20 option_check[i].addEventListener('click', function(e){ 21 price_sum(); 22 }); 23} 24//合計計算 25function price_sum(){ 26 var sum = 0; 27 for(var i = 0 ; i < option_check.length ; i ++){ 28 if(option_check[i].checked){ 29 sum += parseInt(option_check[i].value); 30 } 31 } 32 for (var i = 0; i < bath_check.length; i++){ 33 if(aaa_check[i].checked){ 34 sum += parseInt(aaa_check[i].value); 35 } 36 } 37 for (var i = 0; i < toilet_check.length; i++){ 38 if(bbb_check[i].checked){ 39 sum += parseInt(bbb_check[i].value); 40 } 41 } 42 document.estimate.total.value=sum; 43} 44</script>

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

yambejp

2021/06/23 01:29

単にcheckしたラジオボタンのvalueを足せば良いのでしょうか? オブションは何をしたいのかわかりません オプションが外せなくなるので普通はチェックボックスでは?
guest

回答3

0

js

1var aaa_check = document.getElementsByName('aaa[i]'); 2var bbb_check = document.getElementsByName('bbb[i]');

aaa_checkbbb_checkが空になっているはずです。name="aaa[i]" name="bbb[i]"が付いた要素は存在しないので。

js

1let radioButtons = document.querySelectorAll('input[type="radio"]');

aaa_check bbb_check option_check を1つの変数に入れてしまっても良いのでは。


  • ラジオボタンの状態変更を click イベントでチェックすべきではありません。clickイベントのイベントリスナーがすべて呼ばれた後にブラウザがチェック状態を変更します。change イベントを使うべきです。
  • イベントのバブリングを利用して document.addEventLisetner('change', ...) すれば、addEventLisetner() は1つだけで済みます。

投稿2021/06/23 01:21

編集2021/06/23 01:29
int32_t

総合スコア21695

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

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

megumig

2021/06/23 12:50

コードを添削してくださいましてありがとうございました。 無事解決できました。 大変助かりました。
guest

0

ベストアンサー

javascript

1<script> 2document.addEventListener('change',e=>{ 3 if(e.target.closest('[type=radio],[type=checkbox]')){ 4 var sum=[...document.querySelectorAll('[type=radio]:checked,[type=checkbox]:checked')].reduce((x,y)=>x+parseInt(y.value),0); 5 total.value=sum; 6 } 7}); 8</script> 9<form> 10<label><input type="radio" name="aaa1" value="100">100</label> 11<label><input type="radio" name="aaa1" value="110">110</label><br> 12<label><input type="radio" name="aaa2" value="120">120</label> 13<label><input type="radio" name="aaa2" value="130">130</label><br> 14<label><input type="radio" name="aaa3" value="140">140</label> 15<label><input type="radio" name="aaa3" value="150">150</label><br> 16<hr> 17<label><input type="radio" name="bbb1" value="200">200</label> 18<label><input type="radio" name="bbb1" value="210">210</label><br> 19<label><input type="radio" name="bbb2" value="220">220</label> 20<label><input type="radio" name="bbb2" value="230">230</label><br> 21<label><input type="radio" name="bbb3" value="240">240</label> 22<label><input type="radio" name="bbb3" value="250">250</label><br> 23<hr> 24オプション:<label><input type="checkbox" value="300">300</label> 25<hr> 26合計金額: <input type="text" name="total" id="total" value="0"> 27</form>

投稿2021/06/23 01:40

yambejp

総合スコア116724

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

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

megumig

2021/06/23 12:47

name=aaa1などにしばられることなく、すっきりしたコードになりました。 ありがとうございました。 ひとつのことをするにも、いろんな方法があるんだなとべんきょうになりました。
guest

0

document.getElementsByName('aaa[i]');
document.getElementsByName('bbb[i]');
document.getElementsByName('option[]');

そんな名前の要素は無いですね。
集めたい要素に同じ名前のクラスを付けてdocument.getElementsByClassNameを利用するのが良いと思います。

あと、関係ないですが

for(i=0;i<tbbb_check.length;i++){

tbbbbbbのtypoですよね。

投稿2021/06/23 01:21

itagagaki

総合スコア8402

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

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

megumig

2021/06/23 12:49

まだdocument.getElementsByClassNameを利用すればよいとかまで、知識がなくて質問させていただきました。 参考になりました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問