每次我将商品添加到购物车中时,它都会分析购物车数组中的一个对象,它会输出Item.name,item.price和item.qty,但它只是将它们链接在一起,基本上在同一张表中创建了更多数据单元格标签,如何停止此操作,并确保每个项目都在彼此之间直接新建一个表格? (我看到此代码段内不允许使用sessionStorage)。



var shoppingCart = []; //{Product Name, Product Price}

var discountCoupon = "LINQ1234";

var vat = 1.15;

var totalCost = 0;

var delivery = 120;

var Item = function(name, price, qty){
	this.name = name;
	this.price = price;
	this.qty = qty;
};

function addItemToCart (name, price, qty) {
	var item = new Item(name, price, qty);
	shoppingCart.push(item);
	totalCost += item.price * item.qty * vat;
	sessionStorage.setItem("totalCost", JSON.stringify(totalCost));
	sessionStorage.setItem("shoppingCart", JSON.stringify(shoppingCart));
	alert("You have successfully added an item to your cart!, your current total is: R" + totalCost.toFixed(2) + " Including VAT.");
	return totalCost.toFixed(2);
};

function viewCart() { //output cart items to shopping cart HTML elements dynamically
	var cartItems = document.getElementsByClassName('cart-items')[0];
	var cart = JSON.parse(sessionStorage.getItem("shoppingCart"));
	for (var i = 0; i < cart.length; i++) {
		var a = document.createElement("td");
		a.innerHTML = cart[i].name;
		cartItems.appendChild(a);
		var b = document.createElement("td");
		b.innerHTML = cart[i].price;
		cartItems.appendChild(b);
		var c = document.createElement("td");
		c.innerHTML = cart[i].qty;
		cartItems.appendChild(c);
	}

};

.item-in-cart {
	width: 100%;
	border-collapse: collapse;
}

td, th {
  border: 1px solid #dddddd;
  padding: 15px;
}

.shoppingHeadings {
	text-align: center;
}

.cart-main-head {
	font-weight: bold;
}

.cartTotal {
	text-align: center;
}

<div class="row">
	<div class="column col-md-3 shadow p-3 mb-5 bg-white rounded shop-item">
		<h4 class="shop-item-name">Intel® Celeron® G4900</h4>
		<img class="shop-item-image" src="../Images/Celeron.gif">
		<ul class="shop-item-details">
			<li>Intel® Celeron® Processor G Series</li>
			<li>Cores : 2</li>
			<li>Threads : 2</li>
			<li>Base Frequency : 3.10GHz</li>
		</ul>
		<p class="shop-item-price">R699.00</p>
		<button class="btn btn-info btn-sm">More details</button>
		<button class="btn btn-success btn-sm" onclick="addItemToCart('Intel Celeron G4900', 699, 1)">Add to cart</button>
</div>



<div class="container jumbotron shopping-cart">

	<h2 class="shoppingHeadings">Items in your cart:</h2>

	<br>

<div class="row item-in-cart">
	<table>
		<tr>
		<th>Item Name: </th>
		<th>Item Price: </th>
		<th>Item Quantity: </th>
		<tr>
	</table>
</div>

<!--First row of actual items-->

<div>
	<table class="row cart-items">
	</table>
</div>
<br>

<div class="shopping-cart-form">
	<form>
		Discount Coupon:
		<input id="discount-input" type="text" name="discount-coupon" autocomplete="off" onchange="discountCartTotal()">
	</form><br>
	<form>
		Collection:
		<input type="radio" name="collivery" value="Collection">
		Delivery:
		<input type="radio" name="collivery" value="Delivery">
	</form><br>
<div>
    <button class="btn btn-md btn-danger" onclick="clearCart()">Clear Cart</button>
	<button class="btn btn-md btn-success" onclick="">Checkout</button>
</div><br>

<div class="cartTotal">
	<p>Your total is :</p>
</div>

</div>

<!--Ending of Main jumbotron DIV-->
</div>

最佳答案

由于您已经找到了如何将表数据动态添加到表中,因此不难理解,而是如何为每个项目添加新的表行。现在,您的代码仅将表数据添加到表中,而没有任何表行。那不会产生有效的HTML。

我为示例更改了输出表。在您的代码中,您实际上有两个表,但是我认为这不是您想要的。

我为购物车项目添加了一个示例数组,以使其在这里工作。请参阅代码示例中的注释以了解如何将表数据添加到表行中,最后将表行添加到表中。



function viewCart() {
  /*var cartItems = document.getElementsByClassName('cart-items')[0];*/
  var cartItems = document.getElementById('cart-items');

  /*var cart = JSON.parse(sessionStorage.getItem("shoppingCart"));
  to make it work here, let's use a sample array for the cart items */
  var cart = [
    {
      'name': 'item1',
      'price': 24.99,
      'qty': 1
    },
    {
      'name': 'item2',
      'price': 12.99,
      'qty': 2
    }
  ];
  for (var i = 0; i < cart.length; i++) {
    /* create a new table row */
    var tr = document.createElement("tr");

    /* create td for item name */
    var a = document.createElement("td");
    a.innerHTML = cart[i].name;
    /* add td to table row */
    tr.appendChild(a);

    /* create td for item price */
    var b = document.createElement("td");
    b.innerHTML = cart[i].price;
    /* add td to table row */
    tr.appendChild(b);

    /* create td for item qty */
    var c = document.createElement("td");
    c.innerHTML = cart[i].qty;
    /* add td to table row */
    tr.appendChild(c);

    /* add table row to table #cartItems */
    cartItems.appendChild(tr);
  }

};

table td, th {
  border: solid 1px #000;
  padding: 2px;
  text-align: right;
}

<div>
	<table id="cart-items">
		<tr>
		<th>Item Name</th>
		<th>Item Price</th>
		<th>Item Quantity</th>
		<tr>
	</table>
</div>

<button onclick="viewCart()">
  show cart
</button>





如果您确实想为每个项目添加一个新表,则其工作原理类似。

07-24 17:39
查看更多