اذهب إلى المحتوى

السؤال

نشر (معدل)

السلام عليكم.

لدي مجموعة من products مخزنة في localStorage.

قمت بجلبها و إظهار في صفحة الويب بواسطة  -function drawProductsInCart- 

ثم قمت بعمل -function removeItemFromCart- بغاية حذف product عند النقر 

الكود:


let productsInCartUI = document.querySelector('.cart-products')

function drawProductsInCart(allProducts = []) {
    let products = JSON.parse(localStorage.getItem('productsInCart')) || allProducts
    let cartProductsUI = products.map((product)=>{
        return `
        <div class="product-container">
            <div class="product-img">
                <img src='${product.img_url}.png' alt="" srcset="">
            </div>
            <div class="product-info">
                <h2 class="product-title">${product.title}</h2>
                <h3 class="product-description">${product.des}</h3>
                <h2 class="product-price">${product.price} DT</h2>
            </div>
            <div class="product-btns">
                <button class="remove-to-cart" data-click="${product.id}">Remove Product</button>
            </div>
        </div>
        `
    })
    productsInCartUI.innerHTML = cartProductsUI
}
drawProductsInCart()

let removeProduct = document.querySelectorAll('.remove-to-cart')
function removeItemFromCart(){
    removeProduct.forEach((item) =>{
        let id = item.getAttribute('data-click')
        let productsInCart = localStorage.getItem('productsInCart')
        if (productsInCart) {
            item.addEventListener('click', ()=>{
                let items = JSON.parse(productsInCart)
                let filtered = items.filter(data => data.id != id)
                localStorage.setItem('productsInCart', JSON.stringify(filtered))
                console.log(filtered);
                drawProductsInCart(filtered)
            })
        }
    })
}
removeItemFromCart()

الكود يعمل ولكن إلا بعد حديث الصفحة.

ما أريده هو حذف العنصر مباشرة عند النقر على دون تحديث الصفحة.

شكرا.

تم التعديل في بواسطة Hassan Hedr
توضيح العنوان

Recommended Posts

  • 0
نشر

لمنع حدوث أي مشاكل في التزامن بين رسم العناصر وإضافتها ضمن الصفحة، وبين ربط عمليات الحذف لكل عنصر من القائمة يمكنك تنفيذ العمليتين معًا ضمن تابع واحد فقط لإجبار الربط الصحيح بعد كل عملية رسم للعناصر، أيضًا حاول تعريف أي متغيرات تحتاجها داخل تلك التوابع ضمنها وليس خارجها أيضًا لمنع حدوث أي مشاكل في التزامن بين قيمتها والعمليات عليها، يمكنك حل المشكلة بكتابة الشيفرة السابقة ضمن تابع واحد فقط واستدعاءه كالتالي:

function init() {
    let products = JSON.parse(localStorage.getItem("productsInCart")) || [];
    let productsInCartUI = document.querySelector(".cart-products");
    productsInCartUI.innerHTML = products.map((product) => {
        return `
        <div class="product-container">
            <div class="product-img">
            </div>
            <div class="product-info">
                <h2 class="product-title">${product.title}</h2>
                <h3 class="product-description">${product.des}</h3>
                <h2 class="product-price">${product.price} DT</h2>
            </div>
            <div class="product-btns">
                <button class="remove-to-cart" data-click="${product.id}">Remove Product</button>
            </div>
        </div>
        `;
    });

    document.querySelectorAll(".remove-to-cart").forEach((item) => {
        let id = item.getAttribute("data-click");
        let productsInCart = localStorage.getItem("productsInCart");
        if (productsInCart) {
        item.addEventListener("click", () => {
            let productsInCart = localStorage.getItem("productsInCart");
            let items = JSON.parse(productsInCart);
            let filtered = items.filter((data) => data.id != id);
            localStorage.setItem("productsInCart", JSON.stringify(filtered));
            init();
        });
        }
    });
}

init();

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...