Reputation: 21
var products = [
["Product1", 1, "100", "1"],
["Prodict2", 1, "99", "2"],
["Product3", 1, "60", "3"],
["Product4", 1, "50", "4"],
];
function displayProducts() {
//alert('page');
var productdata = "<div class='w3-container ' style='margin:50px 0;'>";
for (i = 0; i < products.length; i++) {
productdata += "<div class='w3-third'><div class='w3-row-padding w3-card w3-container w3-padding-32 w3-center'>" + products[i][0] + "<br> Rs " + products[i][2] + "<br> <button class='w3-btn w3-green w3-round'onclick='addtocart(" + i + ")'>Add to cart</button></div></div>";
}
productdata += "</div>";
document.getElementById('display').innerHTML = productdata;
}
function addtocart(a) {
cart.push(products[a]);
if (products[a] == cart[a]) {
alert("already in cart");
}
displaycart();
}
var cart = [];
function displaycart() {
cartdata = '<table class="w3-table w3-centered w3-border w3-bordered w3-hoverable"><tr><th>Product Name</th><th>Quantity</th><th>Price</th><th>Total</th><th>Delete</th></tr>';
var Subtotal = 0;
for (i = 0; i < cart.length; i++) {
Subtotal += cart[i][1] * cart[i][2]
cartdata += "<tr><td>" + cart[i][0] + "</td><td><button class='w3-green w3-btn w3-circle' onclick= 'lessqty(" + i + ")'> - </button> " + cart[i][1] + " <button class='w3-green w3-btn w3-circle' onclick= 'addqty(" + i + ")'>+</button></td><td>" + cart[i][2] + "</td><td>" + cart[i][1] * cart[i][2] + "</td><td><button class='w3-btn w3-red ' onclick='delElement(" + i + ")'>🗑️ </button></td></tr>"
}
cartdata += '<tr><td></td><td></td><td></td><td><b>' + Subtotal + '</b></td><td></td></tr></table>';
document.getElementById('cart').innerHTML = cartdata;
}
function delElement(a) {
cart.splice(a, 1);
displaycart();
}
function addqty(a) {
cart[a][1] = cart[a][1] + parseInt(1);
displaycart();
}
function lessqty(a) {
cart[a][1] = cart[a][1] - parseInt(1);
if (cart[a][1] == 0) {
alert('quantity cannot be zero!');
cart[a][1] = parseInt(1);
}
displaycart();
}
<link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
<body onload="displayProducts()">
<div class="" id="display" style="max-width:800px; margin:auto;"></div>
<div class="" id="cart"></div>
</body>
If user tries to add similar product in cart twice it should show an error message to user I tried making id in products array for eg product[0][3] will get id itself to identify if the products is already in cart but not sure how to compare it with the value of array in cart I tried the specific thing in addtocart() function but it was not giving correct output
please suggest me how can i check if the product is already in cart
thanks in advance
Upvotes: 0
Views: 515
Reputation: 147196
You're not checking if the product is already in the cart correctly. Based on your sample data, you should check whether any of the entries in the cart has the same product name as the product being added:
function addtocart(a) {
if (cart.some(p => p[0] == products[a][0])) {
alert("already in cart");
} else {
cart.push(products[a]);
}
displaycart();
}
Note also that you shouldn't add to the cart unless the product is not already in the cart.
Demo:
var products = [
["Product1", 1, "100", "1"],
["Product2", 1, "99", "2"],
["Product3", 1, "60", "3"],
];
function displayProducts() {
//alert('page');
var productdata = "<div class='w3-container ' style='margin:50px 0;'>";
for (i = 0; i < products.length; i++) {
productdata += "<div class='w3-third'><div class='w3-row-padding w3-card w3-container w3-padding-32 w3-center'>" + products[i][0] + "<br> Rs " + products[i][2] + "<br> <button class='w3-btn w3-green w3-round'onclick='addtocart(" + i + ")'>Add to cart</button></div></div>";
}
productdata += "</div>";
document.getElementById('display').innerHTML = productdata;
}
function addtocart(a) {
if (cart.some(p => p[0] == products[a][0])) {
alert("already in cart");
} else {
cart.push(products[a]);
}
displaycart();
}
var cart = [];
function displaycart() {
cartdata = '<table class="w3-table w3-centered w3-border w3-bordered w3-hoverable"><tr><th>Product Name</th><th>Quantity</th><th>Price</th><th>Total</th><th>Delete</th></tr>';
var Subtotal = 0;
for (i = 0; i < cart.length; i++) {
Subtotal += cart[i][1] * cart[i][2]
cartdata += "<tr><td>" + cart[i][0] + "</td><td><button class='w3-green w3-btn w3-circle' onclick= 'lessqty(" + i + ")'> - </button> " + cart[i][1] + " <button class='w3-green w3-btn w3-circle' onclick= 'addqty(" + i + ")'>+</button></td><td>" + cart[i][2] + "</td><td>" + cart[i][1] * cart[i][2] + "</td><td><button class='w3-btn w3-red ' onclick='delElement(" + i + ")'>🗑️ </button></td></tr>"
}
cartdata += '<tr><td></td><td></td><td></td><td><b>' + Subtotal + '</b></td><td></td></tr></table>';
document.getElementById('cart').innerHTML = cartdata;
}
function delElement(a) {
cart.splice(a, 1);
displaycart();
}
function addqty(a) {
cart[a][1] = cart[a][1] + parseInt(1);
displaycart();
}
function lessqty(a) {
cart[a][1] = cart[a][1] - parseInt(1);
if (cart[a][1] == 0) {
alert('quantity cannot be zero!');
cart[a][1] = parseInt(1);
}
displaycart();
}
<link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
<body onload="displayProducts()">
<div class="" id="display" style="max-width:800px; margin:auto;"></div>
<div class="" id="cart"></div>
</body>
Upvotes: 2