javascriptで計算フォームを作成しております。
複数あるvalue(品物の単価)の合計がsyoukeiに出るようにしています。
forでまとめたいのですが、上手くいきません。
初心者で恐縮ですが、ご教示のほどよろしくお願いいたします。
追記 下記のjavascriptは綺麗に動いた例ですが、品物が増えるとその分追記しなくてはならないため、纏められないかと思いご質問させていただきました。
javascript
1$(document).ready(function(){ 2 $('select').change(function() { 3 var syoukei0= document.getElementsByName("syoukei0").value; 4 syoukei0=0; 5 $(".value0 input:text").each(function(){ 6 var value0 = $(this).val(); 7 syoukei0 = parseInt(value0)+syoukei0; 8 }); 9 document.form.syoukei0.value = syoukei0; // 合計を表示 10 }); 11}); 12 13$(document).ready(function(){ 14 $('select').change(function() { 15 var syoukei1= document.getElementsByName("syoukei1").value; 16 syoukei1=0; 17 $(".value1 input:text").each(function(){ 18 var value1 = $(this).val(); 19 syoukei1 = parseInt(value1)+syoukei1; 20 }); 21 document.form.syoukei1.value = syoukei1; // 合計を表示 22 }); 23}); 24 25$(document).ready(function(){ 26 $('select').change(function() { 27 var syoukei2= document.getElementsByName("syoukei2").value; 28 syoukei2=0; 29 $(".value2 input:text").each(function(){ 30 var value2 = $(this).val(); 31 syoukei2 = parseInt(value2)+syoukei2; 32 }); 33 document.form.syoukei2.value = syoukei2; // 合計を表示 34 }); 35});
HTMLも追記いたします。
他のscriptもありclassが乱立していますが、今回の質問では商品1~3横のinputに各商品の小計を入れることだけを目的としているためほかのscrptは記載はしておりません。必要であれば記載させていただきます。
HTML
1<form method="post" name="form"> 2<table border="1"> 3<tr> 4<th>詳細</th> 5<th>単価</th> 6<th>数量</th> 7<th>金額</th> 8</tr> 9 10<tr class="title"><td colspan="4">商品1<input type="text" name="syoukei0" class="syoukeis" value="0" disabled></td></tr> 11<tr class="rows"> 12 <td></td> 13 <td class="tanka" >440円</td> 14 <td><select name="goods1"> 15 <option value="0" selected>0</option> 16 <option value="1">1</option> 17 </select></td> 18 <td class="value0"><input type="text" class="price" size="7" value="0"> 円</td> 19</tr> 20<tr class="title"><td colspan="4">商品2<input type="text" name="syoukei1" class="syoukeis" value="0" disabled></td></tr> 21<tr class="rows"> 22 <td></td> 23 <td class="tanka" >440円</td> 24 <td><select name="goods2"> 25 <option value="0" selected>0</option> 26 <option value="1">1</option> 27 </select></td> 28 <td class="value1"><input type="text" class="price" size="7" value="0"> 円</td> 29</tr> 30 31<tr class="title"><td colspan="4">商品3<input type="text" name="syoukei2" class="syoukeis" value="0" disabled></td></tr> 32<tr class="rows"> 33 <td><font color="red">キャラ1</font></td> 34 <td class="tanka">605円</td> 35 <td ><select name="goods3"> 36 <option value="0" selected>0</option> 37 <option value="1">1</option> 38 </select></td> 39 <td class="value2"><input type="text" class="price" size="7" value="0"> 円</td> 40</tr> 41<tr class="rows"> 42 <td><font color="blue">キャラ2</font></td> 43 <td class="tanka" >605円</td> 44 <td ><select name="goods4"> 45 <option value="0" selected>0</option> 46 <option value="1">1</option> 47 </select></td> 48 <td class="value2"><input type="text" class="price" size="7" value="0"> 円</td> 49</tr> 50<tr class="rows"> 51 <td><font color="yellow">キャラ3</font></td> 52 <td class="tanka" >605円</td> 53 <td ><select name="goods5"> 54 <option value="0" selected>0</option> 55 <option value="1">1</option> 56 </select></td> 57 <td class="value2"><input type="text" class="price" size="7" value="0"> 円</td> 58</tr> 59<a name="top"></a> 60<tr > 61 <td colspan="3" > 62 <button type="button" id="hide">0円を非表示</button> 合計</td> 63 <td><a name="top"></a><input type="text" id="total" size="7" value="0"> 円</td> 64</tr> 65<tr> 66 <td colspan="3" >特典</td> 67 <td><input type="text" id="tokuten" size="7" value="0"> 枚</td> 68</tr> 69</table>
追記 試したこと
見よう見まねでやろうとしましたが、上手く動かなかったのでご質問した次第でございます。
$(document).ready(function(){ $('select').change(function() { var syoukei= document.getElementsByName('[name^="syoukei"]').value; for( i = 0; i < syoukei.length; i++ ) { syoukei[ i ]=0; $(".value[ i ] input:text").each(function(){ var value[ i ] = $(this).val(); syoukei[ i ] = parseInt(value[ i ])+syoukei[ i ]; }); document.form.syoukei[ i ].value = syoukei[ i ]; // 合計を表示 }); }); });
さらに追記 ご指摘を受けて
ご指摘を受け変更したのですが、上手く動きませんでした。(合計値が出されなかった)
どこにミスがあるかご教示いただけますと幸いです。
Javascript
1$(document).ready(function(){ 2 $('select').change(function() { 3 var syoukei= document.querySelectorAll('[name^="syoukei"]'); 4 for( i = 0; i < syoukei.length; i++ ) { 5 syoukei[ i ]=0; 6 $(".value"+i+" input:text").each(function(){ 7 var value[ i ] = $(this).val(); 8 syoukei[ i ] = parseInt(value[ i ])+syoukei[ i ]; 9 }); 10 document.form.syoukei[ i ].value = syoukei[ i ]; // 合計を表示 11 }); 12}); 13}); 14
さらに追記 2つめの回答を受けて
素人考えでいじった結果となります。
お手数おかけしますがよろしくお願いいたします。
$(document).ready(function(){ $('select').change(function() { // 金額入力欄をquerySelectorAllでまとめて取ってくる let priceList = document.querySelectorAll('.price'); priceList.forEach( e => { // 各金額入力欄の対し、予めセットしている小計対象のname値を取得 let targetSyoukeiClass = e.dataset.syoukei; // querySelectorで小計を加算するinputを特定 let targetSyoukeiInput = document.querySelector(`input[name=${targetSyoukeiClass}]`); // 無事取得できたら、小計inputに金額を加算する targetSyoukeiInput.value = 0; if(targetSyoukeiInput){ targetSyoukeiInput.value = Number(targetSyoukeiInput.value) + Number(e.value); } }); }); }); コード
回答2件
あなたの回答
tips
プレビュー