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

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

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

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

Q&A

解決済

1回答

1703閲覧

javaScriptを使いチェックボックスを使用し金額を変更したい

ziyuu

総合スコア25

JavaScript

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

0グッド

0クリップ

投稿2018/05/26 05:44

javaScriptを使いチェックボックスを使用し金額を変更したい

元の金額にチェックボックスにチェックを入れることで表示している金額をへんこうしたい。
複数選択の場合もあり

例)
A商品 24,840円←元の金額

オプションとして
B商品を追加 29,160円
さらに
C商品を追加 29,660円

このようにA商品が元となりB商品、C商品の追加により金額の表示を変更したいです。

発生している問題・エラーメッセージ

以下の書き方だと、どちらかの計算しか反映されません。
javaScript

<script> ///チェックによる金額の変更 $(function () { var other = $('input[name="option_easel[]"]:checked').val(); option_easel(other); $(".option_easel").change(function () { option_easel($(this).prop("checked")); }); var other = $('input[name="option_bag[]"]:checked').val(); option_bag(other); $(".option_bag").change(function () { option_bag($(this).prop("checked")); }); }); function option_easel(ischecked) { ischecked ? $('.item_price span').text("29,160") : $('.item_price span').text("24,840"); }; function option_bag(ischecked) { ischecked ? $('.item_price span').text("25,340") : $('.item_price span').text("24,840"); }; </script>

HTEML

<div> <section> <div id="item"> <p class="item_name">額(中)</p> <p class="item_price"><span>24,840</span>円(税込)</p> </div> </section> <section> <form action="/namae/order/step02" method="post" class="form-horizontal" autocomplete="off"> <div class="form-group"> <div class="col-sm-4 control-label"><label>有料オプション</label></div> <div class="col-sm-7"> <div><label class="checkbox-inline"><input type="checkbox" class="option_easel" name="option_easel[]" value="1">イーゼル(額立て)+4,320円(税込)</label></div> <div><label class="checkbox-inline"><input type="checkbox" class="option_bag" name="option_bag[]" value="1" checked="checked">手提げ袋 +500円(税込)</label></div> <hr> </div> </div> </form> </section> </div>

補足情報(FW/ツールのバージョンなど)

PHPはなんとなくわかりますが、javaScriptの初心者で、他の人が作ったのを変更しています。
大変恐縮ですが、ご教授のほどよろしくおねがいします。

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

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

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

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

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

kei344

2018/05/26 06:40

ご自身で試されたコードを質問文に追記し、「何」が「どのように」わからないのか、コードのどの部分で詰まっているのかなどを具体的に追記されたほうが回答が望めると思います。
ziyuu

2018/05/28 02:24

やりたいことは、表示されている金額をチェックボックスの有無で変わるようにしたいということです。わかりにくくなるためコードは書かないほうが良かったかもしれません。失礼しました。
guest

回答1

0

ベストアンサー

まず方針として、初期の金額に対してちゃんと加算の処理を書いていないのが問題かと思います。
加算をするうえで、表示している金額は,が入った文字列なので数字として扱いやすいように data-*="value" のようなカスタムデータ属性を持つのが良いかと思います

html

1<p class="item_price"><span id="total_price" data-price="24840">24,840</span>円(税込)</p>

html

1<div><label class="checkbox-inline"><input type="checkbox" class="option_item option_easel" name="option_easel[]" value="1" data-price="4320">イーゼル(額立て)+4,320円(税込)</label></div> 2

また、チェックボックスのクリックに対するイベント処理ですが、個別に書かずに共通のクラスを定義して一か所で行うことで、この後チェックボックスが増えても共通の処理で書くことが可能なのでそちらをお勧めします。

js

1 let total = $("#total_price"); 2 let total_price = Number(total.data("price")); 3 // 合計金額の初期化 4 $("input.option_item:checked").each(function(index, item){ 5 // total_price = total_price + Number($(item).data('price')); 6 total_price = total_price + $(item).data('price'); // Number不要でした。暗黙的に数値にしてくれます 7 }); 8 total.data('price', total_price); 9 total.text(total_price.toLocaleString()); 10 11 // チェックボックスクリック時の処理 12 $(".option_item").change(function(event) { 13 let option_item = $(event.target); 14 15 if (option_item.prop('checked')) { 16 // total_price = total_price + Number(option_item.data('price')); 17 total_price = total_price + option_item.data('price'); 18 } else { 19 // total_price = total_price - Number(option_item.data('price')); 20 total_price = total_price - option_item.data('price'); 21 } 22 total.data('price', total_price); 23 total.text(total_price.toLocaleString()); 24 });

以下のURLに以上を踏まえた実装例をあげておきます

~~https://jsfiddle.net/euledge/5qtbr0cz/
~~
https://jsfiddle.net/euledge/1xpLz65t/

投稿2018/05/26 12:25

編集2018/05/28 03:37
euledge

総合スコア2404

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

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

ziyuu

2018/05/28 02:16

ご返答ありがとうございます。 また、わかりにくい質問を読み取っていただきありがとうございます。 いただいたコードをそのまま貼り付けたところ動きませんでした。 いただいたコードについて質問ですが、 HTMLにて追加した『data-price="4320"』は javaScriptではif文内の『total_price = total_price + Number(option_item.data('price'));』で呼び出されているのでしょうか? 大変恐縮ですが、よろしくおねがいします。
euledge

2018/05/28 03:27

すみません、まずは添付したリンク先が誤っていたようなので、実行できるサンプルのリンクを張りなおしました。そちらで動作の確認ができるかと思います。 "data-*" というのはHTML5で採用された非表示のカスタムデータ属性と呼ばれるものです。 これを使用することで任意の値をデータとしてDOM要素に付加できるので今回のように表示文字から値を得るのが難しいようなものに使用するのに適していると思います。 またこの属性にjqueryからアクセスするために data() を使用しています。 下記URLに詳しい説明があります。 http://dresscording.com/blog/html5/custom_data_attribute.html
ziyuu

2018/05/28 04:29

"data-*"については勉強不足でした。 ありがとうございます。 また、いただいたデモを参考に作成したところ理想通りの動きになりました。 重ねてお礼申し上げます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問