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

shopping cart, zmiana ceny za cały koszyk.

Object Storage Arubacloud
0 głosów
414 wizyt
pytanie zadane 3 marca 2023 w JavaScript przez ferdynand Obywatel (1,250 p.)

Dobry Wieczór, 

Mam w koszyku pare elementów. Stworzyłem sobie funkcje, która po zmianie ilośći zmienia mi cene danego produktu.

i wszytko śmiga, ale mam problem z ceną całkowitą koszyka, jak moge ją wyświetlić prawidłowo po zmianie ilości produktu?.

Poniżej kod, który odpowiedzialny jest za zmiane ilośći i ceny.

const selectQuantinity = (e) => {
        let option = e.target.value;
        let selectId = e.target.getAttribute("data-id");
        let currentSelect = e.target.previousElementSibling;
        const matchIdSelect = pricesAndIdObjArray.filter((item) => {return item.itemId === selectId});
        if (matchIdSelect) {
            const currentPrice = matchIdSelect.map((item) => {return item.itemPrice * option});
            currentSelect.innerHTML = `${currentPrice}$`;
        }
    }
    quantinitySelect.forEach((option) => {option.addEventListener('click', selectQuantinity)});

a tutaj kod Ceny za cały koszyk 

  const productPrices = [];
    
    const productPricesData = document.querySelectorAll('[data-price]').forEach((price) => {
        productPrices.push(price.getAttribute('data-price'));
    });
    const pricesToNum = productPrices.map((price) => {return price = +price});

    let sum = 0;
    const sumPrices = () => {
        pricesToNum.forEach((item) => {return sum+=item});
        totalPriceOfCartItems.innerHTML = `${sum}$`;
    }
    sumPrices()

Troche się głowie nad tym i już nie jestem w stanie nic wymyśleć, jak moge currentPrice podmieniac w pricesToNum ? i czy tutaj to coś da ?  

Cały kod :

import { changeValueOfCounter } from "./utils.js";

const getCartProducts = async () => {
    const response = await fetch('https://fakestoreapi.com/products');
    const products = await response.json();


    return products;
};

const showCartProducts = async () => {
    
   const cartContainer = document.querySelector('.cart_container');
   let products = [];
   
   try {
        products = await getCartProducts();
   } catch (e) {
    console.log(e)
   }

    let cartProductsID = (JSON.parse(localStorage.getItem('cartArray'))) || [];

    
        const currentCartProducts = products.filter(product => cartProductsID.some(item => item == product.id)).map((product) => {
            cartContainer.innerHTML += `
            <div class="cart_container--product">
                <div class="cart_product--image" >
                <img src=${product.image} data-image=${product.id}>
                </div>
                <p class="cart_product--desc">${product.title}</p>
                <div class="cart_product-price--quantinity">
                <p data-price=${product.price} data-price-id=${product.id}>${product.price}$</p>
                <select class="cart_select" data-id=${product.id}>
                <option value="1">1</option>
                <option value="2">2</option>
                <option value="3">3</option>
                <option value="4">4</option>
                <option value="5">5</option>
                </select>
                <i class="fa-solid fa-trash" data-delete=${product.id}></i>
                </div>
            <div>`;
        })

    const deleteProduct = (e) => {
        let deleteIconId = e.target.getAttribute("data-delete");
        let deleteCurrentProduct = cartProductsID.filter((product) => { return product !== deleteIconId });
        if (deleteCurrentProduct) {
            cartProductsID = deleteCurrentProduct;
            localStorage.setItem('cartArray', JSON.stringify(deleteCurrentProduct));
            cartContainer.innerHTML = '';
            showCartProducts();
            changeValueOfCounter();
        }
    }

    const cartProductDetails = document.querySelectorAll('.cart_product--image > img');
    
    const showProductDetails = (e) => {
        let productImage = e.target.getAttribute("data-image");
        let url = `/product-details.html?id=${productImage}`;
        window.location.href = url;
    }
    

    cartProductDetails.forEach((item) => item.addEventListener('click', showProductDetails));
    
    const deleteBtn = document.querySelectorAll('[data-delete]').forEach((btn) => {
        btn.addEventListener('click', deleteProduct);
    });

    const pricesAndIdObjArray = [];

    const productPricesAndId = document.querySelectorAll('[data-price][data-price-id]').forEach((item) => {
        pricesAndIdObjArray.push({itemId : item.getAttribute('data-price-id'), itemPrice : item.getAttribute('data-price')});
    });

    const quantinitySelect = document.querySelectorAll('.cart_select');

    const totalPriceOfCartItems = document.querySelector(".total_price > p");

 
    const productPrices = [];
    
    const productPricesData = document.querySelectorAll('[data-price]').forEach((price) => {
        productPrices.push(price.getAttribute('data-price'));
    });
    const pricesToNum = productPrices.map((price) => {return price = +price});

    let sum = 0;
    const sumPrices = () => {
        pricesToNum.forEach((item) => {return sum+=item});
        totalPriceOfCartItems.innerHTML = `${sum}$`;
    }
    sumPrices()
    

    const selectQuantinity = (e) => {
        let option = e.target.value;
        let selectId = e.target.getAttribute("data-id");
        let currentSelect = e.target.previousElementSibling;
        const matchIdSelect = pricesAndIdObjArray.filter((item) => {return item.itemId === selectId});
        if (matchIdSelect) {
            const currentPrice = matchIdSelect.map((item) => {return item.itemPrice * option});
            currentSelect.innerHTML = `${currentPrice}$`;
        }
      
    }
    quantinitySelect.forEach((option) => {option.addEventListener('click', selectQuantinity)});
 }



document.addEventListener('DOMContentLoaded', showCartProducts);

Miłego wieczoru :) 

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 702 wizyt
+1 głos
0 odpowiedzi 306 wizyt
0 głosów
2 odpowiedzi 199 wizyt
pytanie zadane 28 maja 2020 w JavaScript przez vishi7 Początkujący (430 p.)

92,615 zapytań

141,465 odpowiedzi

319,781 komentarzy

61,997 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...