大家在淘宝或者京东购物时,看到在选中全选按钮,或者其他商品选中,从而触发全选按钮是怎么实现的吗?

单商品的价格计算随着数量的增多减少而上升或者下降吗?

总价随着每个商品的价格相加或相减,而变化吗?

来看看下面的代码吧,实现以上所有功能。

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title></head><body><table border="1" cellspacing="0" cellpadding="0"><tr><th><input type="checkbox" id="all" /></th><th>名称</th><th>价格</th><th>数量</th><th>小计</th><th>操作</th></tr><tr><td><input type="checkbox" /></td><td>键盘</td><td>500</td><td><button type="button" onclick="minus(this)">-</button><input type="text" value="1" /><button type="button"  onclick="add(this)">+</button></td><td>500</td><td><button type="button">删除</button></td></tr><tr><td><input type="checkbox" /></td><td>鼠标</td><td>100</td><td><button type="button" onclick="minus(this)">-</button><input type="text" value="1" /><button type="button" onclick="add(this)">+</button></td><td>100</td><td><button type="button">删除</button></td></tr><tr><td colspan="3">总计</td><td colspan="3" id="sum"></td></tr></table></body><script type="text/javascript" src="购物车.js"></script>
</html>

js代码:

//购物车添加数量
function add(btn) {//数量*价格//1、获取到当前数量+1,并更新input框var num = btn.parentElement.children[1].value;btn.parentElement.children[1].value = ++num;//2、获取单价,字符串var price = btn.parentElement.previousElementSibling.innerText//3、计算小计,并更新渲染var total = parseFloat(price) * num;btn.parentElement.nextElementSibling.innerText = total;//总计calSum();
}//购物车减去数量
function minus(btn) {//数量*价格//1、获取到当前数量+1,并更新input框var num = btn.parentElement.children[1].value;if (num == 0) {return;}btn.parentElement.children[1].value = --num;//2、获取单价,字符串var price = btn.parentElement.previousElementSibling.innerText//3、计算小计,并更新渲染var total = parseFloat(price) * num;btn.parentElement.nextElementSibling.innerText = total;//总计calSum();
}//全选和反选
var _all = document.getElementById("all");
var _sum = document.getElementById("sum");
//选出除了全选的复选框
var _boxes = document.querySelectorAll("input[type=checkbox]:not(#all)")
//全选
_all.onclick = function() {//checked:获取全框的选中状态//this:当前的点击对象var status = this.checked;_boxes.forEach(function(tag) {//下边三个选框跟全选框的状态保持一致tag.checked = status;})calSum();
}//单选
_boxes.forEach(function(tag) {tag.onclick = function() {//过滤出所有被选中的复选框var chs = Array.from(_boxes).filter(function(item) {return item.checked == true;})//如果过滤出得选中的复选框长度等于所有复选框长度,说明全选_all.checked = chs.length === _boxes.length;//总计calSum();}})//总计
function  calSum(){var sum=0;_boxes = document.querySelectorAll("input[type=checkbox]:not(#all)")var newBoxes=Array.from(_boxes).filter(function(tag){return tag.checked==true;})newBoxes.forEach(function(tag){sum+=parseFloat(tag.parentElement.parentElement.children[4].innerText)})_sum.innerText=sum;}

看效果:

不光要看懂理解,也要多写写,才能印象更深啊。行动起来!!!学习之余也要适当放松哦。

                                                 有不理解的部分可以评论区留言,或者私信我哦。

js实现购物车,原理简单,代码解释-->详细相关推荐

  1. java循环购物车结算系统_原生JS实现购物车结算功能代码

    html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD ...

  2. 【Python笔记】列表基础操作 :创建,增加、删除、查询。附加:练习题。用简单代码解释。

    Python:列表基础操作 创建,增加.删除.查询.附加练习题.用简单代码解释. 目录 Python:列表基础操作 演示环境 第一部分:列表(list) 1. 创建空列表 2. 创建只有默认值的列表 ...

  3. js发布订阅原理,代码解析

    发布订阅 发布订阅原理 js代码实现 js代码实现原理 发布订阅原理 将要处理的时间放入事件队列中存储(订阅) 将事件队列中存储的事件,按照要求进行统一的执行(发布) js代码实现 var dep= ...

  4. 用jQuery实现轮播图——超简单(代码解释)

    先看效果 鼠标悬浮时停止轮播,离开时自动轮播,点下一张小圆点会随着动 直接上代码 <!DOCTYPE html> <html><head><meta char ...

  5. 双线性插值原理简单通俗解释

    双线性插值,这个名字一听就很高大上,在维基百科上一查(见文末一堆的公式),虽然看着好复杂,但仔细一看道理其实比较简单,所以还是梳理一下好. 双线性插值,顾名思义就是两个方向的线性插值加起来.所以只要了 ...

  6. 利用js实现购物车相关功能

    根据给出购物车页面,用js实现功能部分. 1.实现全选功能. 2.实现四个分项按钮跟随状态的变化并给每一个按钮添加事件,使每个状态发生变化时,判断当前有多少个选中状态的功能. 3.实现已选商品的件数以 ...

  7. 数据结构:竞标赛排序 原理简单

    数据结构:竞标赛排序 原理简单 代码不会写,太复杂了

  8. 步进电机28BYJ-48的驱动(arduino,STM32平台),最全的驱动详细原理,驱动电路分析,驱动代码解释

    步进电机28BYJ-48的驱动(arduino平台,STM32),最全的驱动详细原理,驱动电路分析,驱动代码解释 目录 步进电机28BYJ-48的驱动(arduino平台,STM32),最全的驱动详细 ...

  9. 文本相似度计算的简单实例超详细代码解释(附代码,文件)

    任务目标 本次实验是根据淘宝搜索的商品标题来寻找类似的商品标题: 给定一个标题:Apple iPhone 8 (A1863) 64GB 深空灰色 移动联通电信4G手机 找出与其类似的前十个标题: 后面 ...

  10. 原生js写三级联动 java_原生js三级联动的简单实现代码

    本文实例为大家分享了js查询天气应用,供大家参考,具体内容如下 实现功能:打开网页时显示用户所在城市的天气状况,在输入框输入城市可查询其它城市. 实现过程:先调用百度地图的API来获取用户所在的城市, ...

最新文章

  1. Android 下载文件并显示进度条
  2. lecture 3 qkine- start with connections
  3. python课堂笔记
  4. c语言中函数(linux命令查看依赖类库),数组(内存存储是连续的内存空间),Linux下查看a,a[0],a之间的值,可变数组
  5. 使用PerfView监测.NET程序性能(四):折叠,过滤和时间范围选择
  6. RocketMq重试及消息不丢失机制
  7. 元素与集合的问题思考
  8. PAT (Basic Level) Practice1019 数字黑洞
  9. ASP.NET数据分页技术(4)
  10. JavaScript之数组学习
  11. 【​观察】玩客币更名“链克”背后 迅雷的区块链探索之路
  12. 数字代理在持续由内而外重塑创新
  13. Java txt文件 转 utf-8 格式
  14. UI设计中聊天气泡框的设计技巧
  15. 中点圆c语言程序,[图形学] 画圆(基于中点算法)
  16. 搭建一套基于 Groovy 规则引擎的业务风控平台
  17. 【原】C++11并行计算 — 数组求和
  18. 数字游戏 (number)
  19. 内存映射和多功能LED控制器驱动芯片/带按键扫描的LED驱动芯片(IC)-VK16K33A/B/C,内置RC振荡器,最大16seg和8com
  20. QQ旋风踏上“迷你快车”山寨路

热门文章

  1. oracle exists替换,oracle 优化or 替换为in、exists、union all的几种写法,测试没有问题!...
  2. jmeter测试mysql数据库_【JMeter】JMeter完成一个MySql压力测试
  3. mysql怎么查看记录时间戳_mysql TIMESTAMP(时间戳)详解——查询最近一段时间操作的记录...
  4. 【题解】Atcoder ARC#76 F-Exhausted?
  5. Java给树加子节点个数统计
  6. Knockout自定义绑定my97datepicker
  7. 游戏中按概率播放某个音效简单c++实现
  8. linux学习笔记1(第一本笔记)
  9. Java常量、变量(标识符规则)、数据类型(转换和运算符)、数据优先级
  10. mplfinance画k线图_华尔街交易王:真正短线高手是寻找60分钟K线中的“牛股”