目前学到js和jquery,然后老师就布置了一道购物车的题目,简单实现一下,完整代码在最后
js实现的也有,只不过比较麻烦,有需要再整理
需要实现的功能
- 点击加入购物车,商品出现在下面表格
- 重复的商品不会追加,而是数量+1
- 可以在购物车中对商品进行数量的加减操作
- 计算商品金额和总金额
- 点击删除按钮,删掉购物车中该商品
- 添加、修改、删除对库存数的操作
- 当库存为0时,不能添加商品和执行加操作
- 当购物车中商品数量为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>