博客列表 >js实战之购物车

js实战之购物车

Jason Pu?
Jason Pu?原创
2021年01月15日 19:01:26829浏览

1:用jquery实现全选与全不选功能

首先我们用table创建一个购物车的基本样式

为了方便获取信息,我们给全选定义了id=”check-all”,单价定义了class=”price”,单选定义了name=”item”,数量定义了type=”number”

为了用户操作方便,我们先让用户点全选,下面所有的checkbox全部选中,如果再点等于全部不选中,由jquery实现

  1. $("#check-all").change(function(){$(":checkbox[name='item']").prop("checked",this.checked)});

如果全选状态下,用户取消单个选择框,全选自动取消:

  1. $(":checkbox[name='item']").change(ev=>$("#check-all").prop("checked",ev.target.checked));

经过实验,发现能达到所需功能:

二:购物车自动结算

要求功能:根据用户对商品的勾选和取消,总计的数量和金额也能够自动计算
代码如下:

  1. // 获取所有的数量控件
  2. const numInput = document.querySelectorAll('tbody input[type="number"');
  3. // 用户更新数量时触发自动计算
  4. numInput.forEach(input => (onchange = autoCalculate));
  5. // 购物车刚加载完成时也应该触发自动计算
  6. window.onload = autoCalculate;
  7. // 封装一个自动计算的函数
  8. function autoCalculate() {
  9. // 获取单价组成的数组
  10. const prices = document.querySelectorAll("tbody .price");
  11. const priceArr = [...prices].map(item => item.textContent * 1);
  12. console.log(priceArr);
  13. // 获取数量组成的数组
  14. const numbers = document.querySelectorAll("tbody input[type=number]");
  15. const numArr = [...numbers].map(item => item.value * 1);
  16. console.log(numArr);
  17. //获取被商品选中状态数组,如果选中了,就是1,没选就是0:
  18. let unCheckItems = [];
  19. checkItems.forEach(item=>unCheckItems.push((item.checked)))
  20. for (j=0;j<unCheckItems.length;j++){
  21. if (unCheckItems[j] === false){
  22. unCheckItems[j]=0;
  23. }else {
  24. unCheckItems[j]=1;
  25. }
  26. console.log(unCheckItems);
  27. }
  28. //被选中的商品的数量数组,思路是让被选中的商品列表和商品数量列表的对应坐标相乘得出新数组然后所以元素相加:
  29. let checkedNumbers = [];//这个数组用来装选中商品的数量
  30. let sum = 0;
  31. for (n=0;n<numArr.length;n++){
  32. checkedNumbers.push(numArr[n]*unCheckItems[n]);
  33. }
  34. console.log(checkedNumbers);
  35. //那么就得出被选中的商品总量应该是:
  36. sum = checkedNumbers.reduce((pre,cur)=>pre+cur);
  37. console.log(sum);
  38. // 计算每件商品金额, 单价 * 数量
  39. //const amountArr = [priceArr, numArr].reduce((total, curr) => total.map((item, index) => item * curr[index]));
  40. let amountArr=[];
  41. for(i=0;i<priceArr.length;i++){
  42. amountArr.push(priceArr[i]*numArr[i]);
  43. };
  44. console.log(amountArr);
  45. let totalAmount = 0;
  46. // 被选中的商品的价格的数组
  47. let checkedPrice=[];
  48. for (g=0;g<amountArr.length;g++){
  49. checkedPrice.push(amountArr[g]*unCheckItems[g]);
  50. }
  51. console.log(checkedPrice);
  52. //那么所有被选中的商品的总价应当是:
  53. totalAmount = checkedPrice.reduce((pre,cur)=>pre+cur);
  54. console.log(totalAmount);
  55. // 将计算结果渲染到购物车中
  56. // 被选中商品的总数量
  57. document.querySelector("#sum").textContent = sum;
  58. // 被选中商品的总金额
  59. document.querySelector("#total-amount").textContent = totalAmount;
  60. // 每个商品的金额
  61. document.querySelectorAll(".amount").forEach((item, index) => (item.textContent = amountArr[index]));
  62. }

成果展示:

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议