我有几个不同类别的按钮。当用户单击按钮时,应显示正确的类别。在每个类别中,都有一些产品,每个产品都有自己的“添加到购物车”按钮。
因此,用户单击“床”,然后将项目#3 添加到购物车(更新等等)。
如果用户无法选择类别,我已经设法使用类来做到这一点。如果我在 js 中动态添加按钮,它也可以在没有类的情况下工作。但同样,不允许用户选择类别。
我还希望用户能够搜索项目,显示项目/项目,并将其添加到购物车。
获取产品
class Products {
async getProducts() {
try {
const result = await fetch("/data/products.json");
const data = await result.json();
let products = data.items;
products = products.map((item) => {
const { category, title, price } = item;
const { id } = item.sys;
const image = item.image.url;
return { category, title, price, id, image };
});
return products;
} catch (error) {
console.log(error);
}
}
}
展示产品
class UI {
async displayProducts(products, searchText) {
let matches = products.filter(item => {
const regex = new RegExp(`^${searchText}`,'gi');
return item.category.match(regex);
})
let result = "";
matches.forEach((product) => {
result += `
<!-- single product -->
<article class="product">
<div class="img-container">
<img
src=${product.image}
alt="product"
class="product-img"
/>
<button class="bag-btn" data-id=${product.id}>
<i class="fas fa-shopping-cart">add to cart</i>
</button>
</div>
<h3>${product.title}</h3>
<h4>$${product.price}</h4>
</article>
<!-- end single product -->
`;
});
productDOM.innerHTML = result;
}
getBagButtons() {
const buttons = [...document.querySelectorAll(".bag-btn")];
在 HTML 中,我使用了 onclick="displayProducts('bed')"
这将不起作用,因为 displayProducts 在一个类中。
我还尝试为每个按钮添加一个 id 并在 DOMContentLoaded 中添加一个事件监听器,但这破坏了我的 DOMContentLoaded 的其余部分
DOMContentLoaded
document.addEventListener("DOMContentLoaded", () => {
const ui = new UI();
const products = new Products();
// setup app
ui.setupAPP();
products
.getProducts()
.then((products) => {
ui.displayProducts(products);
Storage.saveProducts(products);
})
.then(() => {
ui.getBagButtons();
ui.cartLogic();
});
});
这些只是我尝试过的一些事情,但每次尝试都会修复一个问题,但会添加一个或多个问题,所以我真的可以在这里使用一些帮助。谢谢!