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

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

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

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

Q&A

解決済

2回答

4051閲覧

Jqueryで数量の変更による金額表示をカンマ3桁で区切りたい

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

0グッド

0クリップ

投稿2017/02/10 04:02

###前提・実現したいこと
いつもお世話になっております。
現在カートの商品ページを想定し開発をしておりまして、
.itemPriceというクラスが付いた箇所にデフォルトの金額を表示させておいて、数量の変更により金額を乗算するという仕組みにしております。
乗算後の金額表示を3桁毎にカンマ区切りで表示をしたいのですが、「NaN」になってしまいます。
お手数おかけしますが、どなたかアドバイスを頂けますでしょうか?
よろしくお願いします。

###該当のソースコード

javascript

1<script type="text/javascript"> 2 3$(function() { 4 //デフォルトの金額を取得 5 var defaultPrice = setPrice($('.itemPrice').text()); 6 7 //数量が変更された場合 8 $('[name="cnt"], .FS2_figure_table_td_updn_btn input[type="image"]').on('keyup keydown click', function() { 9 price = defaultPrice; 10 price = separate(price); 11 var valCnt = $('[name="cnt"]').val(); 12 if(valCnt > 0){ 13 $(".itemPrice").text(price * valCnt + "円"); 14 } 15 else if(valCnt == 0){ 16 $(".itemPrice").text(price + "円"); 17 } 18 }); 19 // 0~9, テンキ―0~9, スペース, backspace, delete, →, ←, 以外は入力キャンセル 20 $('[name="cnt"]').on('keyup keydown', function(e) { 21 var k = e.keyCode; 22 if(!((k >= 48 && k <= 57) || (k >= 96 && k <= 105) || k == 32 || k == 8 || k == 46 || k == 39 || k == 37)) { 23 return false; 24 } 25 }); 26}); 27 28//数値を正規表現 29function setPrice(priceText) { 30 price = Number(priceText.replace(/[^0-9]/g, '')); 31 return price; 32} 33// 正規表現でセパレート 34function separate(num) { 35 return String(num).replace(/(\d)(?=(\d\d\d)+(?!\d))/g, '$1,'); 36} 37 38</script>

html

1<!--ここの金額を変更--> 2<span class="FS2_special_price">当店特別価格</span> 3<span class="itemPrice">10,800円</span> 4 5<form method="POST" action=""> 6 7<table border="0" cellspacing="2" cellpadding="0" class="FS2_figure_table"> 8<tbody> 9<tr> 10<td style="vertical-align:middle;">数量</td> 11<td style="vertical-align:middle;"><input name="cnt" type="text" value="1" size="3" maxlength="16000"></td> 12</tr> 13</tbody></table> 14 15</form> 16

###補足情報(言語/FW/ツール等のバージョンなど)
開発環境
https://js-form-price-test-yujiokayama.c9users.io/index.html

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

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

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

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

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

guest

回答2

0

js

1price = separate(price);

priceをstring型にしているのに

js

1price * valCnt

string型で計算を行おうとしているからで、
separate()を呼ぶのは計算を行った後でやるべきです。

あと、カンマ区切りはnumber.toLocaleString()でできます。

投稿2017/02/10 04:26

turbgraphics200

総合スコア4267

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

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

退会済みユーザー

退会済みユーザー

2017/02/10 05:28

turbgraphics200さん レスありがとうございます。 型を数値にしてるつもりでした・・・ 「number.toLocaleString()」でもできるんですね。 参考になりました。 ありがとうございます!
guest

0

ベストアンサー

separate()が実行されてから金額に掛け算がされていますね、ただしくはこうだと思います。

price = defaultPrice; //price = separate(price); var valCnt = $('[name="cnt"]').val(); if(valCnt > 0){ $(".itemPrice").text(separate(price * valCnt) + "円"); } else if(valCnt == 0){ $(".itemPrice").text(separate(price) + "円"); }

もしくは

price = defaultPrice; //price = separate(price); var valCnt = $('[name="cnt"]').val(); if(valCnt > 0){ price = price * valCnt; } else if(valCnt == 0){ price = price//デッドコード? } $(".itemPrice").text(separate(price)+ "円");

蛇足ですが0個のときでも1個の数量の金額が出てしまうのがちょっと気になりました。

投稿2017/02/10 04:23

編集2017/02/10 04:30
Neko_doshi

総合スコア214

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

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

退会済みユーザー

退会済みユーザー

2017/02/10 05:35

Neko_doshiさん レスありがとうございます。 関数の順番が駄目だったんですね・・・ サンプルコードも頂きありがとうございます。 0のときで1個の数量の金額ですが、ここが仕様的にどうしようかと悩んでいる感じです。 0のときだと「0円」と表示されるのが嫌なので・・・
Neko_doshi

2017/02/10 05:41

0と1に関しては決めの問題ですね、0個もしくはマイナスの数値が入ったときに0円にするときはelse if を else{price=0}とかにすればいいと思います。Validationも忘れずに。 BAありがとうございました。
退会済みユーザー

退会済みユーザー

2017/02/10 05:49

実装の方もうまく動きました! この度はありがとうございました。 最後に追加のアドバイスもありがとうございますー。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問