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>

更多相关文章

  1. JavaScript:1.图片懒加载演示;2.轮播图为翻页按钮添加功能;
  2. JS跳转引发浏览器NS_BINDING_ABORTED
  3. 非名校95后,拿到百度和今日头条offer,他是如何做到的?
  4. 【微信小程序】自定义导航栏(二)
  5. Linux安装
  6. 从网瘾少年逆袭拿到微软 、字节等offer(下)
  7. 从网瘾少年逆袭拿到微软 、字节等offer(上)
  8. 0111 轮播图翻页按钮和鼠标事件
  9. 安装Kali linux

随机推荐

  1. Android(安卓)客户端起HttpServer NanoHt
  2. [Android] (Android 视频悬浮窗)
  3. Android sdk下载找不到support library
  4. Android设置Settings:PreferenceFragment
  5. Android 响应System UI状态,焦点改变,手势
  6. android 自定义 permission 权限
  7. Ogre3D 1.8.1 Android移植
  8. Android EventBus源码分析
  9. Android M5 新特性
  10. [置顶] Android(安卓)Launcher全面剖析