• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Aktualizacja ceny i ilości z użyciem JS

VPS Starter Arubacloud
0 głosów
575 wizyt
pytanie zadane 5 maja 2016 w JavaScript przez Piter Użytkownik (770 p.)

Hej

Chciałbym poprzez kliknięcie na dany produkt zaktualizować cenę i ilość w koszyku właśnie o dane tego produktu. Przykładowo: Początkowo koszyk jest pusty, klikam w produkt i do koszyka wskakuje cena i ilość, kolejne kliknięcia zwiększają te wartości. Strona jest tylko poglądowa, dlatego potrzebuję maksymalnie prostego kodu. Nie potrzebuję gotowców.

Czego użyć, czystego JS, czy jQuery?

Chciałbym te dane wysłać do pola <span>, jest lepsza opcja?

Odnośnik, który powinien dodawać ceny i koszyk, który powinien się aktualizować: 

<a href="javascript:void(0)" class="expand" onclick="add_item(1, 105.99);">Dodaj do koszyka</a>

<span id="quantity">Koszyk jest pusty</span>
<span id="price"></span>

oraz mój, działający w połowie kod JS (tzn dodaje tylko tą ostatnią pozycję, nie sumuje się)

function add_item(quantity, price){

	var quantity = quantity;
	var price = price;
	price = parseFloat(price);

	if(isNaN(basketQuantity))
	{
		var basketQuantity = 0;
		basketQuantity=basketQuantity + quantity;
	}
	if (isNaN(basketPrice))
	{
		var basketPrice = 0;
		basketPrice=basketPrice + price;
	}

	document.getElementById('quantity').innerHTML = basketQuantity+"szt. /";
	document.getElementById('price').innerHTML = basketPrice+"zł";
}

 

Nie liczę na gotowe rozwiązania, chciałbym wiedzieć gdzie robię błąd i może zmienić podejście, odświeżyć umysł :D

 

Pozdrawiam serdecznie ;)

1 odpowiedź

+1 głos
odpowiedź 5 maja 2016 przez nefil1m Stary wyjadacz (10,690 p.)
wybrane 5 maja 2016 przez Piter
 
Najlepsza

innerHTML ktorego używasz po prostu zastąpi poprzedni content diva.

Najwygodniej byłoby przechowywać aktualny stan koszyka jako tablicę obiektów, na przykład:
 

var cartItems = [{
  id: 123,
  quantity: 2,
  price: 5
}, {
  id: 345,
  quantity: 1,
  price: 2
}];

Wtedy przy każdym dodaniu produktu do koszyka dodajesz go do tej tablicy lub usuwasz przy usunięciu. Dodatkowo na końcu każdej akcji wywołujesz funkcję, która przeiteruje po tej tablicy, pomnoży quantity razy price i zmieni zawartość spana.

A na sam koniec, eventy nawieszaj w JavaScriptie a nie w HTML :) I a.expand z Twojego przykładu powinna być buttonem a nie anchorem.

komentarz 5 maja 2016 przez Piter Użytkownik (770 p.)
Co do buttona, faktycznie nie pomyślałem o tym, dzięki!

Chodziło mi o coś jeszcze prostszego, samo zwiększanie ilości o 1 po każdorazowym kliknięciu i dodawanie ceny do obecnej, ale rozumiem, że również mogę użyć podobnej tablicy, tylko trochę ją uprościć?

Co do innerHTML' a myślałem, że jak dodam cenę do już obecnej to będzie ta aktualna i podmienię to w tagu <span>, ale jakoś mi to nie pykło.

Pomyślę trochę nad tą tablicą, lecz proszę właśnie o utwierdzenie mnie czy warto jej użyć do tego prostego liczenia ;)

Dzięki za pomoc i leci naj ;)
komentarz 5 maja 2016 przez nefil1m Stary wyjadacz (10,690 p.)

W tym kodzie który wkleiłeś isNaN(basketPrice) zawsze będzie true bo deklarujesz tą zmienną wewnątrz bloku funkcji i dodatkowo w ifie. Deklarujesz je dopiero jeżeli jest NaN. To znaczy, że Twoja zmienna zostanie wyniesiona do kontekstu funkcji z wartością undefined za każdym razem kiedy wywołujesz tą funkcję. 

Spróbuj zadeklarować basketPrice  i basketQuantity poza blokiem tej funkcji i porównaj rezultaty.

Poczytaj czym jest hoisting w JavaScript'ie. To powinno Cię doprowadzić do tego dlaczego let działa lepiej :)

komentarz 6 maja 2016 przez Piter Użytkownik (770 p.)

Poradziłem sobie, myślę że to jeden z najprostszych sposobów który mogłem zastosować, dzięki za wszystkie rady, wklejam jakby ktoś miał podobny problem.

function add_item(price){
	if(typeof sum === 'undefined')
	{
		var price = parseFloat(price);
		sum = price;
		quantity = 1;
	}
	else
	{
		sum+=price;
		quantity++;
	}

	document.getElementById('quantity').innerHTML = quantity+"szt./";
	document.getElementById('price').innerHTML = sum.toFixed(2)+"zł";
}

 

Podobne pytania

0 głosów
0 odpowiedzi 345 wizyt
pytanie zadane 3 maja 2021 w JavaScript przez ShockWave Bywalec (2,350 p.)
0 głosów
1 odpowiedź 882 wizyt
0 głosów
0 odpowiedzi 173 wizyt

93,005 zapytań

141,971 odpowiedzi

321,252 komentarzy

62,344 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...