博客列表 >JavaScript: 购物车全选自动计算金额和取消全选清零金额

JavaScript: 购物车全选自动计算金额和取消全选清零金额

JiaJieChen
JiaJieChen原创
2021年04月14日 23:32:351058浏览

JavaScript: 购物车全选自动计算金额和取消全选清零金额

代码块

  1. <script>
  2. //首先完成购物车的全选按钮和单个按钮进行绑定
  3. //拿到全选按钮
  4. let checkAll = document.querySelector("#check-all");
  5. //拿到单个按钮组 单个按钮只有name属性 所以用getElementsByName去拿
  6. let checkItem = document.getElementsByName("item");
  7. //测试是否拿到 已拿到
  8. // console.log(checkAll, checkItem);
  9. //onchange 是属性改变时触发状态
  10. //将当前全选的状态变化赋值给单个按钮
  11. checkAll.onchange = (ev) => {
  12. checkItem.forEach((item) => (item.checked = ev.target.checked));
  13. };
  14. //将单个按钮的状态设置为:全部单个按钮选中则选中全选按钮,如果一个没有选中则取消全选按钮
  15. checkItem.forEach(
  16. (item) =>
  17. (item.onchange = () =>
  18. (checkAll.checked = [...checkItem].every((item) => item.checked)))
  19. );
  20. //设置一个自动计算的功能
  21. //首先拿到物品单价
  22. let itemsMoney = document.querySelectorAll("tbody .price");
  23. // 物品数量
  24. let itemsValue = document.querySelectorAll("input[type=number]");
  25. //用户跟新数量的时候自动计算
  26. // itemsMoney.forEach((input) => (onchange = autoSum));
  27. // window.onload 页面加载完成之后自动计算
  28. // window.onload = autoSum;
  29. //测试是否拿到 已拿到
  30. // console.log(money, itemsValue);
  31. // 设置一个自动计算函数
  32. function autoSum() {
  33. //map 有返回值,forEach没有
  34. //物品单价数组
  35. const itemsMoneys = [...itemsMoney].map(
  36. (money) => money.textContent * 1
  37. );
  38. //物品数量数组
  39. const itemsValues = [...itemsValue].map((value) => value.value * 1);
  40. //物品数量的总数
  41. let itemsSum = itemsValues.reduce((pre, cur) => pre + cur);
  42. //数量*单价 = 金额
  43. let autoArr = [itemsMoneys, itemsValues].reduce((total, curr) =>
  44. total.map((item, index) => item * curr[index])
  45. );
  46. //将计算结果渲染到页面中
  47. //总数量
  48. document.querySelector("#sum").textContent = `${itemsSum}`;
  49. //每个商品金额渲染到页面中
  50. document
  51. .querySelectorAll(".amount")
  52. .forEach((item, index) => (item.textContent = autoArr[index]));
  53. //将总金额渲染到页面中
  54. document.querySelector("#total-amount").textContent = `${autoArr.reduce(
  55. (pre, cur) => pre + cur
  56. )}`;
  57. }
  58. checkItem.forEach(
  59. (item) =>
  60. (item.onchange = () => {
  61. item.checked != false
  62. ? autoSum()
  63. : ((document.querySelector("#total-amount").textContent = 0),
  64. (document.querySelector("#sum").textContent = 0));
  65. })
  66. );
  67. </script>
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议