محمود سعداوي2 نشر 8 أكتوبر 2022 أرسل تقرير نشر 8 أكتوبر 2022 (معدل) السلام عليكم. لدي مجموعة من 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() الكود يعمل ولكن إلا بعد حديث الصفحة. ما أريده هو حذف العنصر مباشرة عند النقر على دون تحديث الصفحة. شكرا. تم التعديل في 8 أكتوبر 2022 بواسطة Hassan Hedr توضيح العنوان 1 اقتباس
0 Hassan Hedr نشر 8 أكتوبر 2022 أرسل تقرير نشر 8 أكتوبر 2022 لمنع حدوث أي مشاكل في التزامن بين رسم العناصر وإضافتها ضمن الصفحة، وبين ربط عمليات الحذف لكل عنصر من القائمة يمكنك تنفيذ العمليتين معًا ضمن تابع واحد فقط لإجبار الربط الصحيح بعد كل عملية رسم للعناصر، أيضًا حاول تعريف أي متغيرات تحتاجها داخل تلك التوابع ضمنها وليس خارجها أيضًا لمنع حدوث أي مشاكل في التزامن بين قيمتها والعمليات عليها، يمكنك حل المشكلة بكتابة الشيفرة السابقة ضمن تابع واحد فقط واستدعاءه كالتالي: 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(); 1 اقتباس
السؤال
محمود سعداوي2
السلام عليكم.
لدي مجموعة من products مخزنة في localStorage.
قمت بجلبها و إظهار في صفحة الويب بواسطة -function drawProductsInCart-
ثم قمت بعمل -function removeItemFromCart- بغاية حذف product عند النقر
الكود:
الكود يعمل ولكن إلا بعد حديث الصفحة.
ما أريده هو حذف العنصر مباشرة عند النقر على دون تحديث الصفحة.
شكرا.
تم التعديل في بواسطة Hassan Hedrتوضيح العنوان
1 جواب على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.