js实现基础购物车的制作

功能需求:

1.点击添加商品按钮会出现三个输入框(名称,价格,数量那三格,以及确认和取消按钮)。

2.点击确认后所输入的值会自动形成一行添加到表格中

3.点击编辑按钮时,会重新编辑这一行的数据信息

4.点击加号按钮时总价和总数会变化,减号按钮会显示

5.点击减号按钮时总价和总数会变化

6.点击删除按钮时这行都会被删除,并且总价和总数会减小

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="js/jquery-3.7.1.min.js"></script>
		<style>
			.one {
				display: flex;
				justify-content: center;
				align-items: center;
			}

			.one button {
				width: 3vh;
				height: 3vh;
				margin: 0 5px;
			}

			.two button {
				margin-left: 5px;
			}
		</style>
	</head>
	<body>
		<table border="1px" cellpadding="5" cellspacing="0">
			<thead align="center">
				<tr>
					<td><input type="checkbox" onclick="shoppingOne()" id="all" /></td>
					<td>名称</td>
					<td>价格</td>
					<td>数量</td>
					<td>操作</td>
				</tr>
			</thead>
			<tbody align="center">
				<!-- <tr>
					<td><input type="checkbox" /></td>
					<td>聂聂脸</td>
					<td>¥999</td>
					<td class="one"><button>-</button>
						<p>1</p><button>+</button>
					</td>
					<td class="two"><button>编辑</button><button>删除</button></td>
				</tr> -->
			</tbody>
			<tfoot align="center">
				<tr>
					<td></td>
					<td></td>
					<td id="allPrice">总价:¥0</td>
					<td id="allNum">总数:0</td>
					<td></td>
				</tr>
			</tfoot>
		</table>
		<button onclick="addShop()">添加商品</button>
		<div class="three" style="display: none;">
			<input id="name" type="text" placeholder="请输入商品名称" />
			<!-- onkeyup这代码是用户在输入框输入内容时,判断输入的是否是数字和小数点,如果不是就会被删除掉 -->
			<input id="price" type="number" placeholder="请输入商品价格"
				onkeyup="this.value = this.value.replace(/[^0-9\.]/g,'')" />
			<input id="num" type="number" placeholder="请输入商品数量"
				onkeyup="this.value = this.value.replace(/[^0-9\.]/g,'')" />
			<button onclick="sub()">提交</button>
			<button onclick="quxiao()">取消</button>
		</div>
		<script>
			let xb = 0;
			// 总价 总数
			let allPrice, allNum;
			// 用来判断是添加还是编辑的状态
			let status = true;
			// 假数据
			let data = [{
				"name": "长舌妇",
				"price": "60",
				"num": "1"
			}, {
				"name": "芭比公主",
				"price": "22",
				"num": "1"
			}, {
				"name": "大便超人",
				"price": "30",
				"num": "1"
			}]
			console.log(data);
			// 调用渲染函数
			rander();
			// 渲染函数
			function rander() {
				let str = '';
				for (let i = 0; i < data.length; i++) {
					str += `
						<tr>
							<td><input type="checkbox" name="check" class="item" onclick="fn(${i})"/></td>
							<td>${data[i].name}</td>
							<td>${data[i].price}</td>
							<td class="one">
								<button onclick="jian(${i})">-</button>
								<p class="text">${data[i].num}</p>
								<button onclick="add(${i})">+</button>
							</td>
							<td class="two">
								<button onclick="bianji(${i})">编辑</button>
								<button onclick="deletes(${i})">删除</button>
							</td>
						</tr>
					`;
				}
				document.getElementsByTagName('tbody')[0].innerHTML = str;
			}
			// 单
			let check = document.getElementsByName('check');
			// 全
			let all = document.getElementById('all');
			// 全选的点击事件
			function shoppingOne() {
				if (all.checked == true) {
					for (let i = 0; i < check.length; i++) {
						check[i].checked = true;
					}
				} else {
					for (let i = 0; i < check.length; i++) {
						check[i].checked = false;
					}
				}
			}
			// 单选的点击事件
			let arr = [];

			function fn(i) {
				for (let a = 0; a < check.length; a++) {
					if (check[a].checked == false) {
						all.checked = false;
						arr.push(data[i]);
						return;
					}
				}
				console.log(arr);
				all.checked = true;
			}
			// 加事件
			function add(i) {
				data[i].num++;
				// 数量渲染到页面
				$(".text").eq(i).html(data[i].num);
				// 调用总价函数
				allPrices();
			}

			// 减事件
			function jian(i) {
				// 判断商品数量大于1时减
				if (data[i].num > 1) {
					data[i].num--;
					// 数量渲染到页面
					$(".text").eq(i).html(data[i].num);
					// 数量小于1时删除这个商品
				} else {
					// 第一个参数是删谁,第二个是删几个
					data.splice(i, 1);
					// 渲染页面
					rander();
				}
				// 调用总价函数
				allPrices();
			}

			// 总价函数
			allPrices()

			function allPrices() {
				allPrice = 0;
				allNum = 0;
				for (let i = 0; i < data.length; i++) {
					allPrice += parseFloat(data[i].price) * parseFloat(data[i].num);
					allNum += parseFloat(data[i].num);
				}
				$("#allPrice").html(`总价:¥${allPrice}`);
				$("#allNum").html(`总数:${allNum}`);
			}

			// 添加商品点击事件
			function addShop() {
				name.value = "";
				price.value = "";
				num.value = "";
				$(".three").css("display", "block");
				// 点击添加商品时为true
				status = true;
			}

			// 取消点击事件
			function quxiao() {
				// 让输入框隐藏
				$(".three").css("display", "none");
				// 并且清空输入框的值
				name.value = "";
				price.value = "";
				num.value = "";
			}

			// 获取三个输入框
			let name = document.getElementById('name');
			let price = document.getElementById('price');
			let num = document.getElementById('num');

			// 编辑点击事件
			function bianji(i) {
				$(".three").css("display", "block");
				// 点击是编辑是为false
				status = false;
				xb = i;
				name.value = data[i].name;
				price.value = data[i].price;
				num.value = data[i].num;
			}

			// 删除事件
			function deletes(i) {
				data.splice(i, 1);
				rander();
			}

			// 提交的点击事件
			function sub() {
				// 判断三个输入框不等于空的时候
				if (name.value != "" && price.value != "" && num.value != "") {
					// 判断点击的是添加商品时
					if (status == true) {
						// 往数组里面添加一个对象(对象的内容是输入框的值)
						data.push({
							name: name.value,
							price: price.value,
							num: num.value
						})
						console.log(data);
						// 否则就是点击的是编辑并且回显
					} else {
						data[xb].name = name.value;
						data[xb].price = price.value;
						data[xb].num = num.value
					}
					// 输入框不为空(添加成功过后渲染页面,隐藏并且清空input;)
					rander();
					allPrices();
					name.value = "";
					price.value = "";
					num.value = "";
					$(".three").css("display", "none");
					// 否则就提示先填写
				} else {
					alert("请填写内容!");
				}
				rander();
				allPrices();
			}
		</script>
	</body>
</html>
相关推荐
前端fighter3 分钟前
表单代码示例
前端·javascript·vue.js
天若有情6735 分钟前
【澳门风云】用C开发一个模拟一个简单的扑克牌比大小的游戏
c语言·开发语言·游戏
镜花照无眠9 分钟前
python破解字母已知但大小写未知密码
开发语言·python
chenhua100861110 分钟前
artts升级版本后常见的编译错误(定期更新......)
开发语言·javascript
程序无涯海12 分钟前
Python爬虫教程第1篇-基础知识
开发语言·爬虫·python·网络爬虫
clisk14 分钟前
GO语言入门之准备
开发语言·后端·golang
二十雨辰23 分钟前
[JS]面向对象ES6
前端·javascript·ajax
GDAL24 分钟前
css之transform-origin
前端·css
疯狂创作者26 分钟前
十款绚丽的前端 CSS 菜单导航动画
前端·css
彧A29 分钟前
数据库的学习(4)
java·开发语言·数据库