入力エリアに個数を入れると
「選択されたカードの値段×個数」の合計金額がリアルタイムで表示されるようにしたいのですが、
どうすればよいでしょうか?
変数valが認識されていないのがうまくいかない理由の一つとしてあるのだと思いますが、
ここを認識させる方法がわかりません。
また、認識させればリアルタイムで合計金額が表示されるのでしょうか。
jquery3.4.1使用
html
1<div class="wrapper"> 2 <div class="content"> 3 <form action=""> 4 <div class="price-info"> 5 <div class="price-txt">合計<span class="red"><span class="price-chg" id="price-chg">0</span>円</span>(税込) 6 </div> 7 </div> 8 <div><input id="sum_quantity" type="text" value="" name="sum_number" placeholder="0"></div> 9 <div class="select-item"> 10 <ul class="item-list item-calc"> 11 <li> 12 <input type="checkbox" class="select-checkdox" id="select-checkdox-01" name="select-checkdox"> 13 <label for="select-checkdox-01" class="item-info"> 14 <div class="check-img"></div> 15 <div class="ttl">カード1</div> 16 <div class="price">100円</div> 17 </label> 18 </li> 19 <li> 20 <input type="checkbox" class="select-checkdox" id="select-checkdox-02" name="select-checkdox"> 21 <label for="select-checkdox-02" class="item-info"> 22 <div class="check-img"></div> 23 <div class="ttl">カード2</div> 24 <div class="price">180円</div> 25 </label> 26 </li> 27 <li> 28 <input type="checkbox" class="select-checkdox" id="select-checkdox-03" name="select-checkdox" 29 checked> 30 <label for="select-checkdox-03" class="item-info"> 31 <div class="check-img"></div> 32 <div class="ttl">カード3</div> 33 <div class="price">400円</div> 34 </label> 35 </li> 36 <li> 37 <input type="checkbox" class="select-checkdox" id="select-checkdox-04" name="select-checkdox"> 38 <label for="select-checkdox-04" class="item-info"> 39 <div class="check-img"></div> 40 <div class="ttl">カード4</div> 41 <div class="price">1,100円</div> 42 </label> 43 </li> 44 </ul> 45 </div> 46 </form> 47 </div> 48</div>
jquery
1(function () { 2 let $total = $('#total>span'); 3 let $priceChg = $('#price-chg'); 4 let $itemCalcLi = $('.item-calc > li'); 5 let selectItemArray = []; //値段とcheckの有無を格納する 6 7 8 //値段と個数を計算、出力 9 function priceTxtChange() { 10 let price = 0; //値段 11 12 for (let b = 0; b < selectItemArray.length; b++) { 13 if (selectItemArray[b][1] === true) {//selectItemArray[b][1]の値 がtrueのものだけを計算する 14 price = price + selectItemArray[b][0]; 15 } 16 } 17 price = String(price).replace(/(\d)(?=(\d\d\d)+(?!\d))/g, '$1,'); //カンマ区切りにする 18 $priceChg.text(price); 19 } 20 21 //最初に値段とcheckの有無を格納する 22 function createItemCheckArray() { 23 for (let a = 0; a < $itemCalcLi.length; a++) { 24 let itemCalcLiPrice = $itemCalcLi.eq(a).find('.price').text(); 25 itemCalcLiPrice = itemCalcLiPrice.replace(/[^0-9]/g, ''); //値段から数字を抜き出す 26 itemCalcLiPrice = Number(itemCalcLiPrice); //値段を数値に変換する 27 28 $(function () { 29 var $input = $('#sum_quantity'); 30 $input.on('input', function (event) { 31 var value_number = $input.val(); 32 $output.text(value_number); 33 val = Number(value_number) || 0; //個数を数値に変換する NaNの時は0にする 34 }); 35 }); 36 itemCalcLiPrice = itemCalcLiPrice*val; //値段の数値×個数 37 console.log(itemCalcLiPrice); 38 39 40 //選ばれているかどうか 選ばれているならtrue 41 let itemRSelected; 42 let watchCheckbox = $itemCalcLi.eq(a).find('input[type="checkbox"]'); 43 if (watchCheckbox.prop('checked')) { 44 itemRSelected = true; 45 } else { 46 itemRSelected = false; 47 } 48 selectItemArray.push([itemCalcLiPrice, itemRSelected]);//値段とcheckの有無を格納 49 }; 50 }; 51 52 //load時に読ませる 53 createItemCheckArray(); 54 priceTxtChange(); 55 56 57 //クリックされた時に値を変える 58 function changeItemCheckArray(index, thisCheckToggle) { 59 if (thisCheckToggle) { 60 // チェックボックスがチェックされているならselectItemArray[index][1]をtrueに、違うならfalseに書き換える 61 selectItemArray[index][1] = true; 62 } else { 63 selectItemArray[index][1] = false; 64 } 65 return priceTxtChange();//priceTxtChangeを呼びだし計算 66 }; 67 68 //$itemCalcLiクリックした時 69 $itemCalcLi.on('click', function () { 70 var index = $('.item-calc >li').index(this); 71 let thisCheckToggle; 72 let thisCheckbox = $(this).find('input[type="checkbox"]'); 73 74 if (thisCheckbox.prop('checked')) {//チェックボックスがチェックされているならtrue、違うならfalse 75 thisCheckToggle = true; 76 } else { 77 thisCheckToggle = false; 78 } 79 return changeItemCheckArray(index, thisCheckToggle); 80 }); 81 82})();
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/16 01:38
2021/03/17 02:59