博客列表 >第22章 0114-购物车实战与ES6模块化技术,学习心得、笔记(jQuery实战,购物车,全选,全不选,计算总价)

第22章 0114-购物车实战与ES6模块化技术,学习心得、笔记(jQuery实战,购物车,全选,全不选,计算总价)

努力工作--周工--Robin
努力工作--周工--Robin原创
2021年01月28日 04:51:47868浏览

今天所学心得、笔记

1、jQuery实战,购物车,全选,全不选,计算总价

示例截图

示例代码(只展示了script部分)

  1. <script>
  2. // 1. 获取全选复选框,所有独立商品的复选框
  3. const checkAll = $("#check-all");
  4. const checkItems = $("[name=item]");
  5. // 1.1 点击全选,全不选, 改变商品复选框
  6. checkAll.change(function () {
  7. checkItems.prop("checked", $(this).prop("checked"));
  8. // 调用,自动计算函数
  9. autoCalculate();
  10. });
  11. // 1.2 点击商品复选框,改变全选,全不选
  12. checkItems.change(function () {
  13. // 方法1,比较checked数量与商品数量
  14. checkAll.prop("checked", $("[name=item]:checked").length == $("[name=item]").length);
  15. // 方法2,使用原生数组方法,Array.every()(逻辑‘或’,有一个真就为true),Array.some()(逻辑‘与’,全为真就为true)
  16. // 先使用$(checkItems)将JQ对象变原生,再使用[...原生对象]变数组,再使用every()方法
  17. // checkAll.prop("checked", [...$(checkItems)].every(item=>item.checked));
  18. // console.log([...$(checkItems)].every(item=>item.checked));
  19. // 调用,自动计算函数
  20. autoCalculate();
  21. });
  22. // 2. 计算商品总数量,金额合计、总计
  23. // 2.1 获取所有的数量控件
  24. const numInput = $('tbody input[type=number]');
  25. numInput.change(function () {
  26. autoCalculate();
  27. });
  28. // 3. 页面加载完成,调用,自动计算函数
  29. window.load = autoCalculate();
  30. // 2.2 封装自动计算函数
  31. function autoCalculate() {
  32. // 获取商品数量的, 数组;
  33. const numbers = $("tbody input[type=number]");
  34. const numArr = [...numbers].map(item => item.value * 1);
  35. // console.log(numArr);
  36. // 获取(被选中)商品数量的, 数组; 计算商品总数
  37. let numChecked = 0;
  38. const numbersChecked = $("[name=item]:checked").parent().siblings().children("input");
  39. // console.log(numbersChecked);
  40. numbersChecked.each((index, item)=> numChecked += item.value * 1);
  41. // console.log(numChecked);
  42. // 获取单价的, 数组
  43. const prices = $("tbody .price");
  44. const priceArr = [...prices].map(item => item.innerText * 1);
  45. // console.log(priceArr);
  46. // 计算每件商品合计金额, 单价 * 数量
  47. const amountArr = [priceArr, numArr].reduce((totalPrice, currNum) => totalPrice.map((item, index) => item * currNum[index]));
  48. // console.log(amountArr);
  49. // 将选中商品总数量,每个商品的合计金额,渲染到页面中
  50. // 选中商品总数量
  51. $("#sum").text(numChecked);
  52. // 每个商品的合计金额-------------注意:这句一定要放到,计算商品总金额之前
  53. $(".amount").each((index, item) => item.textContent = amountArr[index]);
  54. // 计算每件(被选中)商品合计累加的, 总金额
  55. let amountPriceChecked = 0;
  56. const amountPriceArrChecked = $("[name=item]:checked").parent().siblings(".amount");
  57. // console.log(amountPriceArrChecked);
  58. amountPriceArrChecked.each((index, item)=> amountPriceChecked += item.innerText * 1);
  59. // console.log(amountPriceChecked);
  60. // (被选中)商品合计累加的, 总金额,渲染到页面中
  61. $("#total-amount").text(amountPriceChecked);
  62. }
  63. </script>
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议