jquery实现购物车基本功能


Posted in jQuery onOctober 25, 2019

购物车里的功能无非是商品数量的加减、商品删除、全选反选等操作,其实现过程如下所示:

1.html代码:

<body>
 <div class="empty">
 购物车空空如也,<a href="javascript:void(0);" >快去选购吧</a>
 </div>
 <table border="2px solid #ccc" id="table">
 <thead>
 <th>
 <input type="checkbox" class="checkOnly" style="vertical-align:middle;margin-right:20px;">全选
 </th>
 <th>序号</th>
 <th>商品名称</th>
 <th>数量</th>
 <th>单价</th>
 <th>小计</th>
 <th>操作</th>
 </thead>
 <tbody>
 <tr>
 <td>
 <input type="checkbox" class="check">
 </td>
 <td class="num">1</td>
 <td>烤煎饼</td>
 <td>
 <span>
 <input type="button" value="-" class="reduces">
 <span class="span">1</span>
 <input type="button" value="+" class="adds">
 </span>
 </td>
 <td>单价:
 <span class="price">2</span>
 </td>
 <td>
 小计:
 <span class="prices">2</span>
 </td>
 <td>
 <a href="#" class="del">删除</a>
 </td>
 </tr>
 <tr>
 <td>
 <input type="checkbox" class="check">
 </td>
 <td class="num">2</td>
 <td>珍珠奶茶</td>
 <td>
 <span>
 <input type="button" value="-" class="reduces">
 <span class="span">1</span>
 <input type="button" value="+" class="adds">
 </span>
 </td>
 <td>单价:
 <span class="price">4</span>
 </td>
 <td>
 小计:
 <span class="prices">4</span>
 </td>
 <td>
 <a href="#" class="del">删除</a>
 </td>
 </tr>
 <tr>
 <td>
 <input type="checkbox" class="check">
 </td>
 <td class="num">3</td>
 <td>水煮鱼</td>
 <td>
 <span>
 <input type="button" value="-" class="reduces">
 <span class="span">1</span>
 <input type="button" value="+" class="adds">
 </span>
 </td>
 <td>单价:
 <span class="price">20</span>
 </td>
 <td>
 小计:
 <span class="prices">20</span>
 </td>
 <td>
 <a href="#" class="del">删除</a>
 </td>
 </tr>
 <tr>
 <td>
 <input type="checkbox" class="check">
 </td>
 <td class="num">4</td>
 <td>蛋糕</td>
 <td>
 <span>
 <input type="button" value="-" class="reduces">
 <span class="span">1</span>
 <input type="button" value="+" class="adds">
 </span>
 </td>
 <td>单价:
 <span class="price">50</span>
 </td>
 <td>
 小计:
 <span class="prices">50</span>
 </td>
 <td>
 <a href="#" class="del">删除</a>
 </td>
 </tr>
 <tr>
 <td>
 <input type="checkbox" class="check">
 </td>
 <td class="num">5</td>
 <td>土豆片</td>
 <td>
 <span>
 <input type="button" value="-" class="reduces">
 <span class="span">1</span>
 <input type="button" value="+" class="adds">
 </span>
 </td>
 <td>单价:
 <span class="price">5</span>
 </td>
 <td>
 小计:
 <span class="prices">5</span>
 </td>
 <td>
 <a href="#" class="del">删除</a>
 </td>
 </tr>
 <tr>
 <td>
 <input type="checkbox" class="check">
 </td>
 <td class="num">6</td>
 <td>蛋黄派</td>
 <td>
 <span>
 <input type="button" value="-" class="reduces">
 <span class="span">1</span>
 <input type="button" value="+" class="adds">
 </span>
 </td>
 <td>单价:
 <span class="price">5.5</span>
 </td>
 <td>
 小计:
 <span class="prices">5.5</span>
 </td>
 <td>
 <a href="#" class="del">删除</a>
 </td>
 </tr>
 <tr>
 <td colspan="7" class="talast">
 <span>商品一共
 <span class="goods_num" style="color:red;font-size:20px;">0</span> 件; 共计花费
 <span class="pricetal" style="color:red;font-size:20px;">0</span> 元; 其中最贵的商品单价是
 <span class="pricest" style="color:red;font-size:20px;">0</span> 元</span>
 </td>
 </tr>
 </tbody>
 </table>
</body>

2.css代码:

<style type="text/css">
 table {
 width: 1000px;
 /* height: 300px; */
 border-collapse: collapse;
 table-layout: fixed;
 text-align: center;
 font-size: 18px;
 margin: 0 auto;
 }

 a {
 text-decoration: none;
 color: black;
 }

 tr {
 height: 50px;
 }

 .check {
 width: 20px;
 height: 20px;
 }

 .checkOnly {
 width: 20px;
 height: 20px;
 }

 .empty {
 font-size: 25px;
 position: fixed;
 top: 45%;
 left: 45%;
 display: none;
 }

 .empty a {
 color: pink;
 }

 .empty a:hover {
 text-decoration: underline;
 }
 </style>

3.js代码:

<script src="js/jquery-1.8.3.min.js"></script> //引入jquery
<script src="js/Allcheck.js"></script> //引入封装好的全选反选插件
<script>
 $(function () {
 $(".adds").each(function () { //点击增加的按钮
 $(this).click(function () {
 //1.改变数量 
 var count = parseFloat($(this).parents("tr").find(".span").html());
 count++;
 $(this).parent("span").find(".span").html(count);
 //2.改小计(先找到单价与数量,再相乘,最后放在小计(“.prices”)里)
 var price = parseFloat($(this).parents("tr").find(".price").html());
 var money = (price * count);
 $(this).parents("tr").find(".prices").html(money);
 //3.改总价
 total();
 countAll();//最后的总数量
 compare();//选中复选框时比较商品单价中最高的
 });
 });
 $(".reduces").each(function () {//点击减少的按钮
 $(this).click(function () {
 //1.改变数量 
 var count = parseFloat($(this).parents("tr").find(".span").html());
 count--;
 if (count < 1) { //当数量减到1时不能再减
 return;
 }
 $(this).parent("span").find(".span").html(count);
 //2.改小计
 var price = parseFloat($(this).parents("tr").find(".price").html());
 var money = (price * count);
 $(this).parents("tr").find(".prices").html(money);
 total();
 countAll();//最后的总数量
 compare();//选中复选框时比较商品单价中最高的
 });
 });
 //删除
 $(".del").each(function () {
 $(this).click(function () {
 let re = $(this).parents("tr"); //找到要删除的行
 if (confirm("你确定删除吗?")) {
 re.remove();
 }
 total();
 countAll(); //总数量
 compare(); //最贵的
 //删除后重新排序号
 for (let i = 0; i < $(".num").length; i++) {
 $(".num")[i].innerHTML = i + 1;
 }
 //全都删除时清空table(通过获取tbody的高度来判断)
 let clear = $("tbody").height();
 if (clear == 50) {
 $("table").remove();
 $(".empty").css({ //删完时显示"购物车为空"这个盒子
 display: "block"
 });
 }
 });
 });
 //合计
 function total() {
 let sum = 0;
 $(".prices").each(function () {//先循环每个小计
 if (($(this).parents("tr").find(".check")).prop("checked")) {//判断复选框有没有选中
 sum += parseFloat($(this).html());
 }
 $(".pricetal").html(sum);
 });
 }
 //总数量
 function countAll() {
 let counts = 0;
 for(let i=0;i<$(".check").length;i++){
 if($(".check")[i].checked==true){ //注意此块用jquery不好实现
 counts+=parseInt( $('.span')[i].innerHTML);
 }
 } 
 $(".goods_num")[0].innerHTML=counts;
 }
 //最贵商品比较
 function compare() {
 let temp = 0;
 for (let i = 0; i < $(".price").length; i++) { //循环单价
 if($(".check")[i].checked==true){
 var temps = parseFloat($(".price")[i].innerHTML);
 if (temps > temp) {
 temp = temps;
 }
 }
 };
 $(".pricest").html(temp);
 }
 //全选插件(引入插件Allcheck.js)
 $(".checkOnly").bindCheck($("#table :checkbox"));
 //当点击复选框时调用total()
 $(".check").each(function (){
 $(this).click(function () {
 let num = 0;
 $(".check").each(function () {
 if ($(this).prop("checked")) {
 num++; 
 }
 countAll(); 
 total();
 compare(); //最贵的
 });
 if(num == $(".check").length){//如果复选框的长度与num相等时,全选那个按钮也会被选中
 $(".checkOnly")[0].checked = true;
 compare(); //最贵的
 countAll(); //总数量
 total();
 }else{
 $(".checkOnly")[0].checked = false;
 }
 });
 });
 $(".checkOnly").click(function () {
 total();
 countAll(); //总数量
 compare(); //最贵的
 });
 });
</script>

补充上面js代码中用到的全选反选插件 \color{red}{补充上面js代码中用到的全选反选插件}补充上面js代码中用到的全选反选插件

//1、定义全选的插件
jQuery.fn.extend({
 bindCheck:function($subCheckBox,$btnUncheck){
 let $allCheckBox = this;
 //1、给全选复选框绑定click事件
 //this:是全选复选框(jQuery对象)
 this.click(function(){
 let isChecked = this.checked;
 $subCheckBox.each(function(){
 this.checked = isChecked;
 });
 });
 //2、给反选
 if(arguments.length==2){
 $btnUncheck.click(function(){
 $subCheckBox.each(function(){
 this.checked = !this.checked;
 });
 reversCheck();
 });
 }
 //3、给每个选择项的复选框绑定事件
 $subCheckBox.click(function(){
 reversCheck();
 });
 function reversCheck(){
 //1、判断是否全部的复选框被选中
 let isAllChecked = true;
 $subCheckBox.each(function(){
 if(!this.checked){
 isAllChecked = false;
 }
 });
 //2、处理全选复选框
 $allCheckBox.attr("checked",isAllChecked);
 }
 }
});

效果如下图所示:

jquery实现购物车基本功能

以上就是一个功能比较完整的购物车,有问题或者建议欢迎指出。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

jQuery 相关文章推荐
使用jQuery监听扫码枪输入并禁止手动输入的实现方法(推荐)
Mar 21 jQuery
jQuery插件DataTables分页开发心得体会
Aug 22 jQuery
jQuery选择器之子元素过滤选择器
Sep 28 jQuery
jQuery完成表单验证的实例代码(纯代码)
Sep 30 jQuery
使用Ajax和Jquery配合数据库实现下拉框的二级联动的示例
Jan 25 jQuery
jQuery获取随机颜色的实例代码
May 21 jQuery
jQuery中将json数据显示到页面表格的方法
May 27 jQuery
jQuery md5加密插件jQuery.md5.js用法示例
Aug 24 jQuery
jquery3和layui冲突导致使用layui.layer.full弹出全屏iframe窗口时高度152px问题
May 12 jQuery
Jquery如何使用animation动画效果改变背景色的代码
Jul 20 jQuery
JS实现选项卡插件的两种写法(jQuery和class)
Dec 30 jQuery
jquery自定义组件实例详解
Dec 31 jQuery
使用jQuery实现掷骰子游戏
Oct 24 #jQuery
jquery实现掷骰子小游戏
Oct 24 #jQuery
jquery 键盘事件 keypress() keydown() keyup()用法总结
Oct 23 #jQuery
jQuery实现轮播图源码
Oct 23 #jQuery
jQuery实现图片随机切换、抽奖功能(实例代码)
Oct 23 #jQuery
jquery轻量级数字动画插件countUp.js使用详解
Oct 17 #jQuery
jQuery/JS监听input输入框值变化实例
Oct 17 #jQuery
You might like
php数组保存文本与文本反编成数组实例
2014/11/13 PHP
php in_array() 检查数组中是否存在某个值详解
2016/11/23 PHP
PHP大文件分割上传 PHP分片上传
2017/08/28 PHP
Zero Clipboard js+swf实现的复制功能使用方法
2010/03/07 Javascript
JQuery扩展插件Validate—4设置错误提示的样式
2011/09/05 Javascript
详解Bootstrap按钮
2016/01/04 Javascript
js计算时间差代码【包括计算,天,时,分,秒】
2016/04/26 Javascript
基于vue.js无缝滚动效果
2018/01/25 Javascript
node.js中对Event Loop事件循环的理解与应用实例分析
2020/02/14 Javascript
vue 路由meta 设置导航隐藏与显示功能的示例代码
2020/09/04 Javascript
[46:23]OG vs EG 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
Python数组遍历的简单实现方法小结
2016/04/27 Python
实例解析Python中的__new__特殊方法
2016/06/02 Python
python之文件的读写和文件目录以及文件夹的操作实现代码
2016/08/28 Python
Python简单实现自动删除目录下空文件夹的方法
2017/08/29 Python
python sys,os,time模块的使用(包括时间格式的各种转换)
2018/04/27 Python
Selenium的使用详解
2018/10/19 Python
python批量爬取下载抖音视频
2019/06/17 Python
python中p-value的实现方式
2019/12/16 Python
python GUI库图形界面开发之PyQt5开发环境配置与基础使用
2020/02/25 Python
Python检测端口IP字符串是否合法
2020/06/05 Python
浅谈keras中Dropout在预测过程中是否仍要起作用
2020/07/09 Python
Python利用命名空间解析XML文档
2020/08/10 Python
HTML里显示pdf、word、xls、ppt的方法示例
2020/04/14 HTML / CSS
职业女性的职业规划
2014/03/04 职场文书
计算机专业毕业生自荐书
2014/06/02 职场文书
活动总结新闻稿
2014/08/30 职场文书
大学生迟到检讨书500字
2014/10/17 职场文书
司法局群众路线教育实践活动开展情况总结
2014/10/25 职场文书
上班迟到检讨书范文300字
2014/11/02 职场文书
2015年清明节网上祭英烈留言寄语
2015/03/04 职场文书
会计专业自荐信范文
2015/03/05 职场文书
抢劫罪辩护词
2015/05/21 职场文书
关于环保的宣传稿
2015/07/23 职场文书
MySQL中日期型单行函数代码详解
2021/06/21 MySQL
python析构函数用法及注意事项
2021/06/22 Python