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

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

新規登録して質問してみよう
ただいま回答率
85.50%
ラジオボタン

ラジオボタンはフォームに使われる要素のひとつであり、ユーザに限られた選択肢からひとつの答えを選んでもらうというものです。

JavaScript

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

Q&A

解決済

2回答

6461閲覧

ラジオボタンの組み合わせで計算するフォームについて

rotosu

総合スコア7

ラジオボタン

ラジオボタンはフォームに使われる要素のひとつであり、ユーザに限られた選択肢からひとつの答えを選んでもらうというものです。

JavaScript

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

0グッド

0クリップ

投稿2017/11/17 01:49

編集2017/11/21 05:55

###前提・実現したいこと

rotosuzx0さん2017/11/1615:24:34
ラジオボタンの組み合わせで数値の変わる自動見積もりフォームを作成したいのですが、作り方がわからず質問させていただきました。

項目は5つになります。
A 3択
B 3択
C 2択
D 3択
E 2択
となっており、全ての項目を選択すると価格を表示するようにしたいです。

###発生している問題・エラーメッセージ
元々項目ごとに数値を入れて足し算という形で作成していたのですが、項目ごとの価格は分からず、組み合わせで結果を表示しないといけない状態です。

###該当のソースコード
javascript
ここにご自身が実行したソースコードを書いてください

※ 数値で計算していた時のものです。
コード

<!-- function keisan(){ var tax = 5; // 消費税率 var i; var p1 = 0; var p2 = 0; var p3 = 0; var p4 = 0; var p5 = 0; var goods1 = document.getElementsByName("goods1"); //チェック済みのラジオボタンを調べて値を取得 for(i=0; i<goods1.length; i++){ if(goods1[i].checked){ p1 = goods1[i].value; break; } } var goods2 = document.getElementsByName("goods2"); //チェック済みのラジオボタンを調べて値を取得 for(i=0; i<goods2.length; i++){ if(goods2[i].checked){ p2 = goods2[i].value; break; } } var goods3 = document.getElementsByName("goods3"); //チェック済みのラジオボタンを調べて値を取得 for(i=0; i<goods3.length; i++){ if(goods3[i].checked){ p3 = goods3[i].value; break; } } var goods4 = document.getElementsByName("goods4"); //チェック済みのラジオボタンを調べて値を取得 for(i=0; i<goods4.length; i++){ if(goods4[i].checked){ p4 = goods4[i].value; break; } } var goods5 = document.getElementsByName("goods5"); //チェック済みのラジオボタンを調べて値を取得 for(i=0; i<goods5.length; i++){ if(goods5[i].checked){ p5 = goods5[i].value; break; } } var price1 = p1 * 1 // 数量×単価 var price2 = p2 * 1// 数量×単価 var price3 = p3 * 1 // 数量×単価 var price4 = p4 * 1 // 数量×単価 var price5 = p5 * 1 // 数量×単価 var total1 = parseInt(price1)+ parseInt(price2)+ parseInt(price3)+ parseInt(price4)+ parseInt(price5); // 税抜き合計を計算 var tax2 = Math.round((total1 * tax) / 100); //消費税を計算 var total2 = total1 + tax2; //税込み合計を計算 //表示用の金額を3桁区切りに変換 var data = new Array(total1,tax2,total2); //金額を配列に格納 var len = data.length; //配列の数を取得 for(cnt=0;cnt<len;cnt++){ data[cnt] = new String(data[cnt]).replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,"); //ここで正規表現で3桁ごとにカンマで区切る } //フォームのテキストエリアに表示する金額 document.form1.field_total1.value = data[0]; // 税抜き合計 } // --> </script> <table cellpadding="0" cellspacing="0" class="pricebox cm_tableStyle_001"> <tr> <th class="label firstchild">A</td> <th class="firstchild_cellMiddle">B</td> <th class="firstchild_cellMiddle">C</td> <th class="firstchild_cellMiddle">D</td> <th class="firstchild_right">E</td> </tr> <tr> <td class="cellLeft" style="border-bottom: solid 1px #ccc;"> <input type="radio" name="goods1" id="goods1" value="120000" onClick="keisan()" />1<br> <input type="radio" name="goods1" id="goods1" value="40000" onClick="keisan()" />2<br> <input type="radio" name="goods1" id="goods1" value="20000" onClick="keisan()" />3<br> </td> <td class="firstchild_cellMiddle" style="border-bottom: solid 1px #ccc;"> <input type="radio" name="goods2" id="goods2" value="1000" onClick="keisan()" />4<br> <input type="radio" name="goods2" id="goods2" value="2000" onClick="keisan()" />5<br> <input type="radio" name="goods2" id="goods2" value="3000" onClick="keisan()" />6 </td> <td class="firstchild_cellMiddle" style="border-bottom: solid 1px #ccc;"> <input type="radio" name="goods3" id="goods3" value="60000" onClick="keisan()" />7<br> <input type="radio" name="goods3" id="goods3" value="60000" onClick="keisan()" />8 </td> <td class="firstchild_cellMiddle" style="border-bottom: solid 1px #ccc;"> <input type="radio" name="goods4" id="goods4" value="130" onClick="keisan()" />9<br> <input type="radio" name="goods4" id="goods4" value="160" onClick="keisan()" />10<br> <input type="radio" name="goods4" id="goods4" value="200" onClick="keisan()" />11 </td> <td class="cellRight" style="border-bottom: solid 1px #ccc;"> <input type="radio" name="goods5" id="goods5" value="130" onClick="keisan()" />12<br> <input type="radio" name="goods5" id="goods5" value="530" onClick="keisan()" />13 </td> </tr> <tr> </table>

###試したこと
課題に対してアプローチしたことを記載してください
ラジオボタンで選択している、していないを1か0で表示する形で
全13項目をスクリプトに入れて考えるのかな、というところまでは行きついたのですがソースの書き方で詰まっています。また、かなり数も多くなるのでページが重たくならないか心配です。

11/21 追記

ご連絡ありがとうございます。
現状、要素一つ一つに価格を設定して足し算といったものができないため、各項目にユニークなアルファベットを振り、その連結でユニークキーを作成。項目を選択することでアルファベットが選択され、出来たユニークキー
から該当の価格を引っ張ってくるといったプログラムを考えています。
問1 abc
問2 def
問3 ghi
問4 jkl

とした場合 aegkではこの数値、といった計算です。
こういったものは実現可能なのでしょうか?

追記 2

ルールはありません。caseで区切って書くようになるかと思います。

お話を伺った方から資料としていただいたものも108パターン分書かれており、個別の単価は決まっておりません。

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

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

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

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

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

kei344

2017/11/20 18:02

まだ質問が「受付中」になっていますが、いったん「解決済」にされてはいかがでしょうか。また、解決されていないなら状況を質問文に追記ください。
x_x

2017/11/21 05:29

まったくルールがなく、108通りのパターンを列挙するのでしょうか? もう力技だと思いますが
guest

回答2

0

ラジオボタンの検索の仕方が今風ではないです
モダンブラウザなら以下でいけます

javascript

1function keisan(){ 2 var goods1 = (v=document.querySelector("[name=goods1]:checked"))?parseInt(v.value):0; 3 alert(goods1); 4}

html

1<form> 2 <input type="radio" name="goods1" id="goods1" value="120000" onClick="keisan()" />1<br> 3 <input type="radio" name="goods1" id="goods1" value="40000" onClick="keisan()" />2<br> 4 <input type="radio" name="goods1" id="goods1" value="20000" onClick="keisan()" />3<br> 5 <input type="button" value="test" onClick="keisan()" 6 7</form>

投稿2017/11/17 02:10

yambejp

総合スコア114572

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

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

rotosu

2017/11/17 04:22

ありがとうございます!参考にさせていただきます。
guest

0

ベストアンサー

HTML

1<input type="radio" name="goods1" value="a" onclick="keisan()" /> 2<!-- 以下同様 -->

JavaScript

1var vals = { 2'aegkl': 100, 3'aegkm': 200, 4'aegjl': 1000, 5// ...略(108通り) 6}; 7 8function keisan() { 9 // 必須チェック略 10 11 var key = ''; 12 for (var i = 1; i < 6; i++) { 13 key += document.querySelector('[name="goods' + i.toString() + '"]:checked').value; 14 } 15 16 console.log(vals[key]); 17}

投稿2017/11/21 06:15

x_x

総合スコア13749

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

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

rotosu

2017/11/21 06:54

ありがとうございます!試しに組んでみたところ、理想通りのものが完成しました。感動です。 ご対応ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問