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

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

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

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

2回答

1369閲覧

javascriptでラジオボタンをチェックした時、valueや入力値を計算したい

ytail

総合スコア13

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2019/02/02 18:21

ラジオボタンやチェックボックスを選択するとvalueに当てられた値を計算し、各ブロックの小計と全ブロックの総合計を算出するフォームを作成しています。
単体のラジオボタンやチェックボックスの計算はできたのですが、multiple欄のテキストボックスに任意で数値を入力した場合に、inputのvalueの値 × 入力欄の任意の値の計算がどうしてもできません。

よろしくお願いします。

HTML

<form action=""> <div class="category"> [Group-A] <label><input type="checkbox" class="value" value="100">100</label>  <label><input type="checkbox" class="value" value="200">200</label>  <label><input type="checkbox" class="value" value="300">300</label>  <label> <input type="checkbox" class="value aaa" value="100">multiple pages:100× <input value="" type="text" class="pages">pages </label> [Subtotal]<input type="text" class="xxx" value="0"> </div> <div class="category"> [Group-B] <label><input type="radio" class="value" value="100">100</label>  <label><input type="radio" class="value" value="200">200</label>  <label><input type="radio" class="value" value="300">300</label>  <label> <input type="checkbox" class=" aaa" value="200">multiple pages:200× <input value="" type="text" class="pages">pages </label> [Subtotal]<input type="text" class="xxx" value="0"> </div> Total:<input type="text" class="zzz" value="0"> </form>

JS

$(function() { $('.category').each(function() { var category = this; //選択項目 $('input[class="value"]', this).change(function() { var fee = []; $('input[class="value"]:checked' , category).each(function() { var num = parseInt($(this).val()); fee.push(num); }); var subtotal = 0; for (var i = 0; i < fee.length; i++) { subtotal += fee[i]; } $('input[class="aaa"]:checked' , category).each(function() { //入力値 var aaa = parseInt($(this).val()); $('.pages', category).on('change', function() { var str = $(this).val(); var pageNum = Number(str.replace(/[^0-9]/g, '')); if(pageNum == 0) { pageNum = ''; } $(this).val(pageNum); var ccc = []; if(pageNum != 0) { var price = pageNum * aaa; ccc.push(price); } var subtotal = 0; for (var i = 0; i < ccc.length; i++) { subtotal += ccc[i]; } }); }); $('.xxx', category).val(subtotal); var array = []; $('.xxx').each(function() { var num = parseInt($(this).val()); array.push(num); }); var total = 0; for (var i = 0; i < array.length; i++) { total += array[i]; } $('input[class="zzz"]').val(total); }); }); });

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

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

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

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

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

guest

回答2

0

ベストアンサー

javascript

1<script> 2$(function(){ 3 $('.category input').on('change',function(){ 4 var selector=$(this).closest('.category').find('input'); 5 var m=selector.filter('.value:checked').map(function(){ 6 return parseInt($(this).val()); 7 }).get(); 8 if(selector.filter('.multi').is(':checked')){ 9 var v=parseInt(selector.filter('.multi').val())*parseInt(selector.filter('.multi').next('.pages').val()||"0"); 10 m.push(v); 11 } 12 selector.filter('.subtotal').val(m.reduce(function(x,y){ 13 return x+y; 14 })); 15 $('.total').val($('.subtotal').map(function(){ 16 return parseInt($(this).val()); 17 }).get().reduce(function(x,y){ 18 return x+y; 19 })); 20 }); 21}); 22</script> 23<form action=""> 24 <div class="category"> 25 [Group-A] 26 <label><input type="checkbox" class="value" value="100">100</label>  27 <label><input type="checkbox" class="value" value="200">200</label>  28 <label><input type="checkbox" class="value" value="300">300</label>  29 <label> 30 <input type="checkbox" class="multi" value="100">multiple pages:100× 31 <input value="" type="text" class="pages">pages 32 </label> 33 [Subtotal]<input type="text" class="subtotal" value="0" readonly> 34 </div> 35 <div class="category"> 36 [Group-B] 37 <label><input type="radio" name="grpB" class="value" value="100">100</label>  38 <label><input type="radio" name="grpB" class="value" value="200">200</label>  39 <label><input type="radio" name="grpB" class="value" value="300">300</label>  40 <label> 41 <input type="checkbox" class="multi" value="200">multiple pages:200× 42 <input value="" type="text" class="pages">pages 43 </label> 44 [Subtotal]<input type="text" class="subtotal" value="0"> 45 </div> 46 Total:<input type="text" class="total" value="0"> 47</form>

投稿2019/02/04 05:51

yambejp

総合スコア114839

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

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

ytail

2019/02/04 13:33

できました!ありがとうございました!
guest

0

changeなど何度も起こるイベント中にイベント登録すると、複数回登録した関数が動くことになるため避けたほうがよいです。(毎回イベントを外す処理を加える手もあるが)

投稿2019/02/02 18:31

kei344

総合スコア69407

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問