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

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

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

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

jQuery

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

1036閲覧

合計金額のリアルタイム表示

flyingHigh

総合スコア41

JavaScript

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

jQuery

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2021/03/04 04:18

編集2021/03/04 04:21

入力エリアに個数を入れると
「選択されたカードの値段×個数」の合計金額がリアルタイムで表示されるようにしたいのですが、
どうすればよいでしょうか?
変数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})();

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

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

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

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

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

guest

回答1

0

ベストアンサー

チェックボックスに金額をもたせられるならそれを利用
そうでないなら相対位置から金額を探してください

javascript

1$(function(){ 2 $('#sum_quantity,.select-checkdox').on('input',function(){ 3 var quantity=isNaN($('#sum_quantity').val())?0:parseInt($('#sum_quantity').val()); 4 var price=$('.select-checkdox:checked').nextAll('.price').map(function(){ 5 return parseInt($(this).text().replace(/[^0-9]/g,'')); 6 }).get().reduce(function(x,y){ 7 return x+y; 8 }); 9 $('#price-chg').text(quantity*price); 10 }); 11});

投稿2021/03/04 06:29

編集2021/03/04 12:58
yambejp

総合スコア114784

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

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

flyingHigh

2021/03/16 01:38

お返事遅くなりました。 ご提示していただいたコードに関しては reduceのx,yに入るものを.priceの値段テキストから 数字のみを抜き出しているという風に理解しました。 テキストから抜き出しているのにx,yに数値が入っていないのは なぜなのでしょうか? また、お返事いただいた内容通り、checkboxのidに金額を持たせたとして、 その値を取得する内容をどこに差し込めばよいのでしょうか? reduceに入る内容はmapのところで得ているのだとは思うのですが、 うまくいかず、ご教授いただければ幸いです。
Lhankor_Mhy

2021/03/17 02:59

横からすみません。 .nextAll('.price') ↓ .next().children('.price') で動作しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問