🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JavaScript

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

Q&A

解決済

1回答

1069閲覧

Javascript カートの合計金額(注文していない商品をマイナスしても、その商品の金額が引かれてしまう)

Brisk

総合スコア4

JavaScript

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

0グッド

1クリップ

投稿2021/01/12 09:18

編集2021/01/12 14:26
  • リスト### 前提・実現したいこと

複数商品をカートに入れた後、
”ー”ボタンを押すと商品に関係なく合計金額から値段が引かれてしまう。

ちなみにGitHubのこのデータになります↓
リンク内容
Olive.html上で、カート追加するとカートに入っていない商品の”ー”を押しても合計金額が引かれる。
加えて、もし可能であれば、チェックアウト画面に前ページのカート情報が反映されるようなコードも知りたいです。(データ上は反映されない)


1000円商品がカートにある

カートに入っていない600円の商品の”ー”ボタンを押すと
金額が600円引かれる

コード

Javascript

1 2var total = 0; 3 4// Dishes represents the appetizer prices only 5var dish1 = 0; 6var dish2 = 0; 7var dish3 = 0; 8var dish4 = 0; 9var dish5 = 0; 10var dish6 = 0; 11var dish7 = 0; 12var dish8 = 0; 13var dish9 = 0; 14var dish10 = 0; 15var dish11 = 0; 16 17// Prices for Dishes 18var price1 = 1000; 19var price2 = 1000; 20var price3 = 1500; 21var price4 = 1500; 22var price5 = 650; 23var price6 = 800; 24var price7 = 1000; 25var price8 = 800; 26var price9 = 800; 27var price10 = 800; 28var price11 = 800; 29var price12 = 0; 30var price13 = 0; 31var price14 = 0; 32 33 34// Num represents dish numbers 35function changeQuantity(amount,num) 36{ 37 var displayDish = 0; // Represents the dish the needs to be shown 38 39 if(num == 1) 40 { 41 if(dish1+amount>=0) { 42 dish1+=amount; 43 } 44 displayDish = 1; 45 updateTotal(amount,price1); 46 } 47 else if(num == 2) 48 { 49 if(dish2+amount>=0) { 50 dish2+=amount; 51 } 52 displayDish = 2; 53 updateTotal(amount,price2); 54 } 55 else if(num == 3) 56 { 57 if(dish3+amount>=0) { 58 dish3+=amount; 59 } 60 displayDish = 3; 61 updateTotal(amount,price3); 62 } 63 else if(num == 4) 64 { 65 if(dish4+amount>=0) { 66 dish4+=amount; 67 } 68 displayDish = 4; 69 updateTotal(amount,price4); 70 } 71 72 else if(num ==5) 73 { 74 if(dish5+amount>=0) { 75 dish5+=amount; 76 } 77 displayDish = 5; 78 updateTotal(amount,price5); 79 } 80 else if(num ==6) 81 { 82 if(dish6+amount>=0) { 83 dish6+=amount; 84 } 85 displayDish = 6; 86 updateTotal(amount,price6); 87 } 88 else if(num ==7) 89 { 90 if(dish7+amount>=0) { 91 dish7+=amount; 92 } 93 displayDish = 7; 94 updateTotal(amount,price7); 95 } 96 else if(num ==8) 97 { 98 if(dish8+amount>=0) { 99 dish8+=amount; 100 } 101 displayDish = 8; 102 updateTotal(amount,price8); 103 } 104 else if(num ==9) 105 { 106 if(dish9+amount>=9) { 107 dish9+=amount; 108 } 109 displayDish = 9; 110 updateTotal(amount,price9); 111 } 112 else if(num ==10) 113 { 114 if(dish10+amount>=10) { 115 dish10+=amount; 116 } 117 displayDish = 10; 118 updateTotal(amount,price10); 119 } 120 121 displayQuantity(displayDish); 122} 123 124function updateTotal(amount,price) 125{ 126 if(amount == -1 && (total-price >= 0)) 127 { 128 total-=price; 129 } 130 else if(amount == 1){ 131 total+=price; 132 } 133 134 displayTotal(); 135} 136 137function displayQuantity(num) 138{ 139 140 if(num === 1) 141 { 142 document.getElementById("quantity1-1").innerHTML = dish1.toString(); 143 document.getElementById("quantity1-2").innerHTML = dish1.toString(); 144 if(dish1 === 0) 145 { 146 document.getElementById("check1").style.display = 'none'; 147 } 148 else{ 149 document.getElementById("check1").style.display = 'block'; 150 } 151 } 152 else if(num == 2) 153 { 154 document.getElementById("quantity2-1").innerHTML = dish2.toString(); 155 document.getElementById("quantity2-2").innerHTML = dish2.toString(); 156 if(dish2 === 0) 157 { 158 document.getElementById("check2").style.display = 'none'; 159 } 160 else{ 161 document.getElementById("check2").style.display = 'block'; 162 } 163 } 164 else if(num == 3) 165 { 166 document.getElementById("quantity3-1").innerHTML = dish3.toString(); 167 document.getElementById("quantity3-2").innerHTML = dish3.toString(); 168 if(dish3 === 0) 169 { 170 document.getElementById("check3").style.display = 'none'; 171 } 172 else{ 173 document.getElementById("check3").style.display = 'block'; 174 } 175 } 176 else if(num == 4) 177 { 178 document.getElementById("quantity4-1").innerHTML = dish4.toString(); 179 document.getElementById("quantity4-2").innerHTML = dish4.toString(); 180 if(dish4 === 0) 181 { 182 document.getElementById("check4").style.display = 'none'; 183 } 184 else{ 185 document.getElementById("check4").style.display = 'block'; 186 } 187 } 188 else if(num == 5) 189 { 190 document.getElementById("quantity5-1").innerHTML = dish5.toString(); 191 document.getElementById("quantity5-2").innerHTML = dish5.toString(); 192 if(dish5 === 0) 193 { 194 document.getElementById("check5").style.display = 'none'; 195 } 196 else{ 197 document.getElementById("check5").style.display = 'block'; 198 } 199 } 200 else if(num == 6) 201 { 202 document.getElementById("quantity6-1").innerHTML = dish6.toString(); 203 document.getElementById("quantity6-2").innerHTML = dish6.toString(); 204 if(dish6 === 0) 205 { 206 document.getElementById("check6").style.display = 'none'; 207 } 208 else{ 209 document.getElementById("check6").style.display = 'block'; 210 } 211 } 212 else if(num == 7) 213 { 214 document.getElementById("quantity7-1").innerHTML = dish7.toString(); 215 document.getElementById("quantity7-2").innerHTML = dish7.toString(); 216 if(dish7 === 0) 217 { 218 document.getElementById("check7").style.display = 'none'; 219 } 220 else{ 221 document.getElementById("check7").style.display = 'block'; 222 } 223 } 224 else if(num == 8) 225 { 226 document.getElementById("quantity8-1").innerHTML = dish8.toString(); 227 document.getElementById("quantity8-2").innerHTML = dish8.toString(); 228 if(dish8 === 0) 229 { 230 document.getElementById("check8").style.display = 'none'; 231 } 232 else{ 233 document.getElementById("check8").style.display = 'block'; 234 } 235 } 236 else if(num == 9) 237 { 238 document.getElementById("quantity9-1").innerHTML = dish9.toString(); 239 document.getElementById("quantity9-2").innerHTML = dish9.toString(); 240 if(dish9 === 0) 241 { 242 document.getElementById("check9").style.display = 'none'; 243 } 244 else{ 245 document.getElementById("check9").style.display = 'block'; 246 } 247 } 248 else if(num == 10) 249 { 250 document.getElementById("quantity10-1").innerHTML = dish10.toString(); 251 document.getElementById("quantity10-2").innerHTML = dish10.toString(); 252 if(dish10 === 0) 253 { 254 document.getElementById("check10").style.display = 'none'; 255 } 256 else{ 257 document.getElementById("check10").style.display = 'block'; 258 } 259 } 260 261} 262 263function displayTotal() 264{ 265 var result = Math.round(total*100) / 100; 266 result = result.toFixed(2); 267 268 document.getElementById("total").innerHTML = result.toString(); 269} 270

その他のページが必要な際はご連絡ください。

お手数おかけいたしますが、
よろしくお願いいたします。

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

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

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

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

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

Jon_do

2021/01/12 14:05

状況がこちらでも再現できるコードが必須です。
guest

回答1

0

ベストアンサー

10000文字超えてたのでcodepenに上げました。
https://codepen.io/nanasido/pen/abmRjzo

考え方
単純に注文数が0の時に−ボタンが押せなければよい。
cssで最初から-ボタンを押せなくする。
jsで
+ボタンを押したら-ボタンを押せるようにする。
注文数が1の時、-ボタンを押したら-ボタンを押せなくする。

htmlの記述はolive.html
cssの記述はolive.css
jsの記述はmenu.jsにそれぞれ対応してます。

チェックアウト画面に前ページのカート情報が反映されるようなコード

これはおそらく、メニューを切り替えた場合、+ボタンを押しても反映されないということを言っていると予測し
5番目のメニュー
Main Courseの
Lasagna Classico これだけ反映されるようにしました。
他のメニューも追加したいのであれば
5番目のメニューを参考にhtml,css,jsをそれぞれ記述してください。

投稿2021/01/13 05:29

Jon_do

総合スコア1373

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

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

Brisk

2021/01/13 05:57

jon_doさん ご回答ありがとうございます! なるほど! 発想の転換には頭が回りませんでした。。。 感謝です! ちなみに、 ①商品追加ページ→②チェックアウト画面→①商品追加ページ(前ページに戻る) と、情報がリセットされてしまうのですが ①の情報を保存しておく場合もjsで記述可能でしょうか。 もしくはその他の言語を使う必要がございまうでしょうか。
Brisk

2021/01/13 06:03

>>チェックアウト画面に前ページのカート情報が反映されるようなコード に関して、私の言葉足らずで申し訳ございません。 -- 内容 -- olive.html上、右手の”Continue”を押すと チェックアウトページに飛ぶのですが、 前ページのカート情報が反映されません。 前ページのカート情報を次ページのチェックアウト画面に反映することは jsで実現可能でしょうか。 お手数おかいたしますが、 アドバイスいただけますと幸いです。
Jon_do

2021/01/13 07:05

出来ますが、今回のようなecサイトはサーバーサイドで動かす言語(phpなど)が必要で、セキュリティーも考慮する必要があり面倒なのでshopifyなどを使うのがおすすめです。
Brisk

2021/01/13 13:59

なるほど。 やはり他言語使用が必要なんですね。 当方かなりの素人のため、勉強になりました。 ちなみにクレジットカード等の個人情報を 上記サイトを用いて扱う予定は今のところありません。 チェックアウト情報が、指定メール送られるのみの使用にしたい場合、 簡易的なPHPを用いての実現可能でしょうか。
Jon_do

2021/01/13 14:41

可能です。今回の機能ならほぼphpで作ったほうが無難なような気がします
Brisk

2021/01/13 15:04

なるほど! ちょっと設計し直してみます! お忙しいところ 色々とありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問