Blogger Information
Blog 40
fans 0
comment 1
visits 24380
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
第22章 0114-购物车实战与ES6模块化技术,学习心得、笔记(jQuery实战,购物车,全选,全不选,计算总价)
努力工作--周工--Robin
Original
867 people have browsed it

今天所学心得、笔记

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>
Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments