jquery实现简易购物车

目前学到js和jquery,然后老师就布置了一道购物车的题目,简单实现一下,完整代码在最后
js实现的也有,只不过比较麻烦,有需要再整理
在这里插入图片描述

需要实现的功能

  1. 点击加入购物车,商品出现在下面表格
  2. 重复的商品不会追加,而是数量+1
  3. 可以在购物车中对商品进行数量的加减操作
  4. 计算商品金额和总金额
  5. 点击删除按钮,删掉购物车中该商品
  6. 添加、修改、删除对库存数的操作
  7. 当库存为0时,不能添加商品和执行加操作
  8. 当购物车中商品数量为1时,不能执行减操作

html代码

为了练习,老师并没有把标签都加上class或id

<table border="1px" width="400px" align="center" style="text-align: center;">

	<thead>
		<tr>
			<th>商品名称</th>
			<th>价格</th>
			<th>库存</th>
			<th>操作</th>
		</tr>
	</thead>

	<tbody>
		<tr>
			<td class="pn">苹果</td>
			<td>5</td>
			<td>5</td>
			<td>
				<button type="button">加入购物车</button>
			</td>
		</tr>

		<tr>
			<td class="pn">橘子</td>
			<td>6</td>
			<td>6</td>
			<td>
				<button type="button">加入购物车</button>
			</td>
		</tr>

		<tr>
			<td class="pn">人参果</td>
			<td>60</td>
			<td>4</td>
			<td>
				<button type="button">加入购物车</button>
			</td>
		</tr>

		<tr>
			<td class="pn">蟠桃</td>
			<td>900</td>
			<td>3</td>
			<td>
				<button type="button">加入购物车</button>
			</td>
		</tr>
		
	</tbody>
</table>

<br><br>

<table border="1px" width="400px" align="center">
	<tr>
		<th>商品名称</th>
		<th>价格</th>
		<th>数量</th>
		<th>金额</th>
		<th>操作</th>
	</tr>


	<tbody id="products">
		<!-- <tr>
			<td>苹果</td>
			<td>5</td>
			<td>
				<input type="button" value="-" />
				<span>1</span>
				<input type="button" value="+" />
			</td>
			<td>5</td>
			<td>
				<button type="button" style="width: 30px;">x</button>
			</td>
		</tr> -->

	</tbody>

	<tfoot>
		<tr>
			<td colspan="4">总金额</td>
			<td id="totalMoney"></td>
		</tr>
	</tfoot>

</table>

添加购物车

$("table:first button").click(function() {

	var productName = $(this).parent().siblings("td:first").text();
	var price = $(this).parent().siblings("td:eq(1)").text();

	//先判断重复,再操作库存
	if (checkProduct(productName)) { //判断是否重复
		return;
	}
	if (!checkStock(productName, -1)) {
		return;
	}

	//组装一行
	var html =
		'<tr>' +
		'<td class="nameTd">' + productName + '</td>' +
		'<td>' + price + '</td>' +
		'<td>' +
		'<input type="button" value="-" οnclick="changeNum(this,-1)" />' +
		'<span>1</span>' +
		'<input type="button" value="+" οnclick="changeNum(this,1)"  />' +
		'</td>' +
		'<td class="moneyTd">' + price + '</td>' +
		'<td>' +
		'<button type="button" style="width: 30px;" οnclick="del(this)">x</button>' +
		'</td>' +
		'</tr>';

	$("#products").append(html);

	//计算总金额
	totalMoney();
});

计算总金额

function totalMoney() {
	var sum = 0;
	$("#products .moneyTd").each(function() {
		sum += parseFloat($(this).text());
	});
	$("#totalMoney").text(sum);
}

删除操作

function del(btn) {

	if (confirm("确定删除此商品")) {

		//修改库存
		var productName = $(btn).parent().siblings("td:eq(0)").text();
		var num = $(btn).parent().siblings("td:eq(2)").find("span").text();
		checkStock(productName, parseInt(num));

		$(btn).parent().parent().remove();

		//计算总金额
		totalMoney();

		$("span").text();
	}

}

修改数量,计算金额

//修改数量
function changeNum(btn, num) {
	/*
		修改库存
	 */
	var productName = $(btn).parent().siblings("td:first").text();

	if (!checkStock(productName, -num)) {
		return;
	}

	var span = $(btn).siblings("span:first");

	//修改数量
	var oldNum = span.text();

	if (oldNum == 1 && num == -1) {
		checkStock(productName, -1);
		return;
	}

	var newNum = parseInt(oldNum) + num;
	span.text(newNum);

	//修改金额
	var price = span.parent().siblings("td:eq(1)").text();
	span.parent().siblings("td:eq(2)").text(parseFloat(price) * newNum);

	//计算总金额
	totalMoney();
}

验证商品重复

//验证商品重复
function checkProduct(productName) {

	var flag = false;
	$("#products .nameTd").each(function() {

		if ($(this).text() == productName) {
			var btn = this.parentNode.getElementsByTagName("td")[2].getElementsByTagName("input")[1];
			changeNum(btn, 1);
			flag = true; //表示已添加购物车
		}

	});
	return flag;
}

修改库存

function checkStock(productName, num) {

	var flag = true;
	$("table:first .pn").each(function() {

		if ($(this).text() == productName) {
			var stockTd = $(this).siblings("td:eq(1)");
			var oldStock = stockTd.text();
			if (oldStock == 0 && num < 0) {
				flag = false;
			} else {
				stockTd.text(parseInt(oldStock) + num);
			}
		}

	});

	return flag;
}

完整代码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>

		<style type="text/css">
			button {
				width: 90px;
				height: 23px;
			}
		</style>

		<!--
			引入jquery文件
		 -->
		<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js" type="text/javascript" charset="utf-8">
		</script>

	</head>
	<body>

		<table border="1px" width="400px" align="center" style="text-align: center;">

			<thead>
				<tr>
					<th>商品名称</th>
					<th>价格</th>
					<th>库存</th>
					<th>操作</th>
				</tr>
			</thead>

			<tbody>
				<tr>
					<td class="pn">苹果</td>
					<td>5</td>
					<td>5</td>
					<td>
						<button type="button">加入购物车</button>
					</td>
				</tr>

				<tr>
					<td class="pn">橘子</td>
					<td>6</td>
					<td>6</td>
					<td>
						<button type="button">加入购物车</button>
					</td>
				</tr>

				<tr>
					<td class="pn">人参果</td>
					<td>60</td>
					<td>4</td>
					<td>
						<button type="button">加入购物车</button>
					</td>
				</tr>

				<tr>
					<td class="pn">蟠桃</td>
					<td>900</td>
					<td>3</td>
					<td>
						<button type="button">加入购物车</button>
					</td>
				</tr>
			</tbody>


		</table>

		<br><br>

		<table border="1px" width="400px" align="center">
			<tr>
				<th>商品名称</th>
				<th>价格</th>
				<th>数量</th>
				<th>金额</th>
				<th>操作</th>
			</tr>


			<tbody id="products">
				<!-- <tr>
					<td>苹果</td>
					<td>5</td>
					<td>
						<input type="button" value="-" />
						<span>1</span>
						<input type="button" value="+" />
					</td>
					<td>5</td>
					<td>
						<button type="button" style="width: 30px;">x</button>
					</td>
				</tr> -->

			</tbody>

			<tfoot>
				<tr>
					<td colspan="4">总金额</td>
					<td id="totalMoney"></td>
				</tr>
			</tfoot>

		</table>

	</body>

	<script type="text/javascript">
		$("table:first button").click(function() {

			var productName = $(this).parent().siblings("td:first").text();
			var price = $(this).parent().siblings("td:eq(1)").text();

			//先判断重复,再操作库存
			if (checkProduct(productName)) { //判断是否重复
				return;
			}
			if (!checkStock(productName, -1)) {
				return;
			}


			//组装一行
			var html =
				'<tr>' +
				'<td class="nameTd">' + productName + '</td>' +
				'<td>' + price + '</td>' +
				'<td>' +
				'<input type="button" value="-" οnclick="changeNum(this,-1)" />' +
				'<span>1</span>' +
				'<input type="button" value="+" οnclick="changeNum(this,1)"  />' +
				'</td>' +
				'<td class="moneyTd">' + price + '</td>' +
				'<td>' +
				'<button type="button" style="width: 30px;" οnclick="del(this)">x</button>' +
				'</td>' +
				'</tr>';

			$("#products").append(html);

			//计算总金额
			totalMoney();
		});


		function totalMoney() {
			var sum = 0;
			$("#products .moneyTd").each(function() {
				sum += parseFloat($(this).text());
			});
			$("#totalMoney").text(sum);
		}


		function del(btn) {

			if (confirm("确定删除此商品")) {

				//修改库存
				var productName = $(btn).parent().siblings("td:eq(0)").text();
				var num = $(btn).parent().siblings("td:eq(2)").find("span").text();
				checkStock(productName, parseInt(num));

				$(btn).parent().parent().remove();

				//计算总金额
				totalMoney();

				$("span").text();
			}

		}

		//修改数量
		function changeNum(btn, num) {
			/*
				修改库存
			 */
			var productName = $(btn).parent().siblings("td:first").text();

			if (!checkStock(productName, -num)) {
				return;
			}

			var span = $(btn).siblings("span:first");

			//修改数量
			var oldNum = span.text();

			if (oldNum == 1 && num == -1) {
				checkStock(productName, -1);
				return;
			}

			var newNum = parseInt(oldNum) + num;
			span.text(newNum);

			//修改金额
			var price = span.parent().siblings("td:eq(1)").text();
			span.parent().siblings("td:eq(2)").text(parseFloat(price) * newNum);

			//计算总金额
			totalMoney();
		}

		//验证商品重复
		function checkProduct(productName) {

			var flag = false;
			$("#products .nameTd").each(function() {

				if ($(this).text() == productName) {
					var btn = this.parentNode.getElementsByTagName("td")[2].getElementsByTagName("input")[1];
					changeNum(btn, 1);
					flag = true; //表示已添加购物车
				}

			});
			return flag;
		}


		function checkStock(productName, num) {

			var flag = true;
			$("table:first .pn").each(function() {

				if ($(this).text() == productName) {
					var stockTd = $(this).siblings("td:eq(1)");
					var oldStock = stockTd.text();
					if (oldStock == 0 && num < 0) {
						flag = false;
					} else {
						stockTd.text(parseInt(oldStock) + num);
					}
				}

			});

			return flag;

		}
	</script>
</html>
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的使用jQuery实现购物的例子: ```html <!DOCTYPE html> <html> <head> <title>购物</title> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <style> .item { margin-bottom: 10px; } .item input[type="checkbox"] { margin-right: 5px; } .total { font-weight: bold; } </style> </head> <body> <h1>购物</h1> <div class="item"> <input type="checkbox" class="checkbox"> <span>商品1 - 100元</span> </div> <div class="item"> <input type="checkbox" class="checkbox"> <span>商品2 - 200元</span> </div> <div class="item"> <input type="checkbox" class="checkbox"> <span>商品3 - 300元</span> </div> <div class="total"> 总价:<span id="totalPrice">0</span>元 </div> <script> $(document).ready(function() { // 全选按钮点击事件 $("#selectAll").click(function() { $(".checkbox").prop("checked", $(this).prop("checked")); calculateTotalPrice(); }); // 单个商品复选框点击事件 $(".checkbox").click(function() { calculateTotalPrice(); }); // 计算总价 function calculateTotalPrice() { var totalPrice = 0; $(".checkbox:checked").each(function() { var price = parseInt($(this).next().text().split(" - ")[1]); totalPrice += price; }); $("#totalPrice").text(totalPrice); } }); </script> </body> </html> ``` 这个例子中,我们使用了jQuery实现购物的功能。每个商品都有一个复选框和对应的价格,用户可以通过勾选复选框来选择要购买的商品,同时总价会实时更新。点击全选按钮可以全选或取消全选。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值