小程序购物车点击选中当前商品与全选、全不选,如果本店铺下的所有商品全部被选中则选中本店铺。

// 第二步:点击选中当前商品
  selectList:function(e){
    // 获取当前点击元素的small,并获取父元素的index(也就是当前商品所属店铺的index)并获取list;
    var bigindex = e.currentTarget.dataset.bigindex;
    var small = e.currentTarget.dataset.small;
    var list = this.data.list;
    var num = this.data.num;
    var storeNum = this.data.storeNum;
    var s = 0,t = 0;
    var isSelectAll = this.data.isSelectAll;
    // 切换当前选中元素的状态
    list[bigindex].abuyCarVos[small].isSelect = !list[bigindex].abuyCarVos[small].isSelect;
    // 每一次点击的时候都初始化t,如果选中了当前元素t++;如果t==list[bigindex].abuyCarVos.length则选中当前店铺,否则不选中
    for(var i in list[bigindex].abuyCarVos){
      if(list[bigindex].abuyCarVos[i].isSelect){
        t++;
      }
    }
    // console.log(num,list[bigindex].abuyCarVos.length,storeNum)
    // t==list[bigindex].length的时候店铺选中
    if(t == list[bigindex].abuyCarVos.length){
      list[bigindex].isSelectStore = true;
      // this.setData({
      //   list[bigindex]:true
      // });
      // storeNum++;
    }else{
      list[bigindex].isSelectStore = false
    }
    for(var i in list){
      if(list[i].isSelectStore){
        s++;
      }
    }
    storeNum = s;
      // Object.keys(list).length此方法可以获取到对象的长度
      // 如果storeNum == Object.keys(list).length,则表示购物车所有商品已经选中,全选按钮也需要选中
      if(storeNum == Object.keys(list).length){
        isSelectAll=true;
      }else{
        isSelectAll=false;
      }
    this.setData({
      list:list,
      num:num,
      storeNum:storeNum,
      isSelectAll:isSelectAll
    });
    // this.gototalPrice()
  },
  // 第三步  购物车点击全选按钮
  selectAll:function(){
    // 获取全选按钮之前的状态取反
    var isSelectAll = !this.data.isSelectAll;
    var isSelectStore = !this.data.isSelectStore;
    var isSelect = !this.data.isSelect;
    var num = this.data.num;
    var list = this.data.list;
    // 控制所有的list中的每一项是否选中
    for(var i in list){
      list[i].isSelectStore = isSelectAll;
      for(var t= 0;t<list[i].abuyCarVos.length;t++){
        list[i].abuyCarVos[t].isSelect = isSelectAll;
        num++;
      }
    }
    if(isSelectAll){
      // num = Object.keys(list).length;
    }else{
      num = 0;
    }
    // 把数据更新到data中
    this.setData({
      isSelectAll:isSelectAll,
      isSelectStore:isSelectStore,
      isSelect:isSelect,
      list:list,
      num:num
    });
    // console.log(num)
    // this.gototalPrice()
  },

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是微信小程序购物车多全选的实现方法: 1. 在wxml文件中,使用checkbox组件实现多全选功能,使用bindchange事件监听checkbox的状态变化,使用wx:for循环渲染商品列表。 ```html <view wx:for="{{goodsList}}" wx:key="id"> <checkbox value="{{item.checked}}" bindchange="checkboxChange" data-id="{{item.id}}"></checkbox> <view>{{item.name}}</view> <view>{{item.price}}</view> </view> <checkbox value="{{allChecked}}" bindchange="checkboxAllChange"></checkbox> <view>全选</view> <button bindtap="deleteGoods">删除</button> ``` 2. 在js文件中,定义goodsList数组存储商品列表,定义allChecked变量表示全选状态,定义selectedIds数组存储选中商品id。 ```javascript Page({ data: { goodsList: [ { id: 1, name: '商品1', price: 10, checked: false }, { id: 2, name: '商品2', price: 20, checked: false }, { id: 3, name: '商品3', price: 30, checked: false } ], allChecked: false, selectedIds: [] }, // checkbox状态变化事件 checkboxChange: function(e) { var id = e.currentTarget.dataset.id; var checked = e.detail.value.length > 0; var goodsList = this.data.goodsList; for (var i = 0; i < goodsList.length; i++) { if (goodsList[i].id == id) { goodsList[i].checked = checked; break; } } this.setData({ goodsList: goodsList }); this.updateSelectedIds(); }, // 全选状态变化事件 checkboxAllChange: function(e) { var allChecked = e.detail.value.length > 0; var goodsList = this.data.goodsList; for (var i = 0; i < goodsList.length; i++) { goodsList[i].checked = allChecked; } this.setData({ goodsList: goodsList, allChecked: allChecked }); this.updateSelectedIds(); }, // 更新选中商品id updateSelectedIds: function() { var goodsList = this.data.goodsList; var selectedIds = []; for (var i = 0; i < goodsList.length; i++) { if (goodsList[i].checked) { selectedIds.push(goodsList[i].id); } } this.setData({ selectedIds: selectedIds }); }, // 删除选中商品 deleteGoods: function() { var selectedIds = this.data.selectedIds; var goodsList = this.data.goodsList; for (var i = goodsList.length - 1; i >= 0; i--) { if (selectedIds.indexOf(goodsList[i].id) >= 0) { goodsList.splice(i, 1); } } this.setData({ goodsList: goodsList, allChecked: false, selectedIds: [] }); } }) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值