前提・実現したいこと
現在、値段と個数から金額を計算するテーブルを作成していて、
1箇所でも変更、もしくは計算ボタンなどをクリックすると
全体的に数値が再計算されるようなものを目指していますが、
動的に行が追加されるフォームで計算がうまくいかず、困っています。
https://www.kabanoki.net/3132/
上記のページを参考にフォームの大枠は完成したのですが、
例えば2列目の「単価」を変更しても、
4列目の「合計」にはその変更による結果が反映されません。
なんとなくfunction(self)のselfあたりで
変更した項目と同じ列しか計算処理が行われていないのだと思うのですが、
かわりの対処法がどれもうまくいかず、
書籍やGoogleで調べては途方に暮れています。
1箇所変更・もしくは計算ボタンなどをクリックすれば
全項目の数値が再計算されるようにするには
どのようにJavascriptを変更すれば良いのか、ご教示いただけないでしょうか。
よろしくお願いいたします。
該当のソースコード
HTML
1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <meta http-equiv="X-UA-Compatible" content="ie=edge"> 7 <title>Document</title> 8 <script type="text/javascript" src="js/jquery-3.4.1.min.js" charset="UTF-8"></script> 9 <script type="text/javascript" src="js/jquery-ui.js"></script> 10 <script type="text/javascript" src="js/system_demo.js"></script> 11</head> 12<body> 13 14<table class="table table-bordered"> 15 <thead> 16 <th>品名</th> 17 <th>単価合計:<input type="text" id="SumUnit" value="600" disabled></th> 18 <th>個数合計:<input type="text" id="Sumnumber" value="48" disabled></th> 19 <th>合計:<input type="text" id="SumTotal" value="648" disabled></th> 20 </thead> 21 <tbody> 22 <tr> 23 <td><input type="text" value="りんご"></td> 24 <td><input type="text" data-group="Unit" value="100"></td> 25 <td><input type="text" data-group="number" value="8" ></td> 26 <td><input type="text" data-group="Total" value="108" disabled></td> 27 </tr> 28 <tr> 29 <td><input type="text" value="にんじん"></td> 30 <td><input type="text" data-group="Unit" value="200"></td> 31 <td><input type="text" data-group="number" value="16"></td> 32 <td><input type="text" data-group="Total" value="216" disabled></td> 33 </tr> 34 <tr> 35 <td><input type="text" value="肉"></td> 36 <td><input type="text" data-group="Unit" value="300"></td> 37 <td><input type="text" data-group="number" value="24"></td> 38 <td><input type="text" data-group="Total" value="324" disabled></td> 39 </tr> 40 </tbody> 41</table> 42<button class="btn btn-danger">追加</button> 43 44 45</body> 46</html> 47
JavaScript
1$(function(){ 2 var DoSum = function(self){ 3 var GROUP = self.data('group'); 4 var SUM = 0; 5 6 $("[data-group='"+ GROUP +"']").each(function(index){ 7 SUM = SUM + Number($(this).val()); 8 }); 9 10 $("#Sum" + GROUP).val(SUM); 11 }; 12 13 // テーブル内のinputを変更した場合 14 $('table').on('change', '[data-group]', function(){ 15 DoSum($(this)); 16 }); 17 18 $('button').click(function(){ 19 $('tbody').after( 20 '<tr>' 21 +'<td><input type="text" value=""></td>' 22 +'<td><input type="text" data-group="Unit" value=""></td>' 23 +'<td><input type="text" data-group="Tax" value=""></td>' 24 +'<td><input type="text" data-group="Total" value=""></td>' 25 +'</tr>' 26 ); 27 }); 28});
試したこと
[data-group='"+ GROUP +"']の部分をそれぞれ直接指定して
ページ内に「計算」ボタンを追加して
on clickで全てのdata-groupを計算するように変更してみたり
全く別のコードもいくつかトライしてみたのですが、
動的に行数が増えるせいか、どれもうまくいきませんでした。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/07/18 02:10