微信小程序---购物车功能(选中与取消选中,全选与取消全选)

微信小程序—购物车功能(选中与取消选中,全选与取消全选)

html

<view class="box">
  <view class="container">
    <view class="hopeList" wx:for="{{ListInfo}}" wx:key="index">
      <image  class="icos1"  wx:if="{{item.avatar == ''}}"  src="../../images/arv.png"></image>
      <image  class="icos1" wx:else src="{{item.avatar}}"></image>    
      <view class="fonts fontsh">{{item.name}}</view>
      <image class="icos2" data-id="{{item.id}}" bindtap="isClick" src="{{item.isHidden == true?'../../images/yuan1.png':'../../images/yuan.png'}}"></image>
    </view>
  </view>
  <view class="butt">
    <image class="icos3" data-id="{{item.id}}" bindtap="selAll" src="{{selectAll == true?'../../images/yuan1.png':'../../images/yuan.png'}}"></image>
    <view class="fonts fontsh1">全选</view>
    <view class="btns2" bindtap="chosed">确定</view>
  </view>
</view>

js

  data: {
    isHidden: true,
    idList: [],
    ListInfo: [],
    selectAll: false,
    idAll:[],//上个页面传过来的选中的用户id
  },
  // 批量选择
  isClick(e) {
    var that = this
    var ListInfo = that.data.ListInfo //信息数组
    var ids = e.currentTarget.dataset.id//点击获取的id
    var idList = that.data.idList//id数组
    var idAll = that.data.idAll//上个页面获取的id 已经选择过的id
    for (var i = 0; i < ListInfo.length; i++) {
      if (ids == ListInfo[i].id) { //筛选id
        var ListInfo = that.data.ListInfo
        if (ListInfo[i].isHidden == 1) {
          ListInfo[i].isHidden = 0
          idList.splice(ListInfo.indexOf(ids), 1) //取消选中后 id去一
          idAll.splice(ListInfo.indexOf(ids), 1)
          that.setData({ //局部刷新
            ListInfo,
            idList: idList,
            idAll:idAll
          })
          if (ListInfo.length > idList.length) {//判断是否全选 (不全选)
            that.setData({
              selectAll: false
            })
          }
        } else {
          ListInfo[i].isHidden = 1
          idList = idList.concat(ListInfo[i].id).concat(idAll)//取消选中后 id增加一
          var idList1 = idList.filter(function (element, index, self) { //去重
            return self.indexOf(element) === index;
          });
          that.setData({
            ListInfo,
            idList: idList1
          })
          if (ListInfo.length <= idList.length) {//判断是否全选 (全选)
            that.setData({
              selectAll: true
            })
          }
        }
      }
    }
  },

  // 全选与反选
  selAll() {
    var that = this;
    var ListInfo = that.data.ListInfo//获取的信息数组
    var idList = [] //id数组
    var idAll = [] //上个页面返回已选择过的id
    var selectAll = that.data.selectAll
    for (let i = 0; i < ListInfo.length; i++) {
      if (!selectAll) {
        ListInfo[i].isHidden = 1
        idList = idList.concat(ListInfo[i].id) // 组成id数组
      } else {      
        ListInfo[i].isHidden = 0
        idList.splice(ListInfo.indexOf(ListInfo[i].id), 1)
        idAll.splice(ListInfo.indexOf(ListInfo[i].id), 1)
      }
    }
    that.setData({
      ListInfo: that.data.ListInfo,
      selectAll: !selectAll,
      idList: idList,
      idAll:idAll
    })
  },
  // 选择确定
  chosed() {
    var that = this
    var isidList = that.data.idList
    if(isidList == ''){ // 判断页面是否之前选择过
      var idList = that.data.idAll
    }else{
      var idList = that.data.idList
    }
    var pages = getCurrentPages();   //当前页面
    var prevPage = pages[pages.length - 2];   //上一页面
    prevPage.setData({//为上一个页面赋值
      idAll: idList,
    });
    if (idList.length <= 0) {
      wx.showToast({
        title: '请选择人员哦!',
        icon: 'none'
      })
    } else {
      wx.navigateBack({
        delta: 1
      })
    }
  },

css

.hopeList {
  width: 100%;
  display: flex;
  margin-bottom: 40rpx;
}

.icos1 {
  width: 120rpx;
  height: 120rpx;
  border-radius: 50%;
  margin-right: 40rpx;
}

.fontsh {
  width: 70%;
  line-height: 120rpx;
  text-align: left;
}

.icos2 {
  width: 40rpx;
  height: 40rpx;
  margin: 42rpx 0 0 0;
}

.butt {
  width: 100%;
  box-shadow: 0px -2px 6px 0px rgba(118, 196, 244, 0.4);
  border: 1px solid rgba(255, 255, 255, 100);
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  padding: 32rpx 40rpx;
  box-sizing: border-box;
  display: flex;
}

.icos3 {
  width: 40rpx;
  height: 40rpx;
  margin: 20rpx 0 0 0;
}

.fontsh1 {
  margin-top: 20rpx;
  margin-left: 20rpx;
}

.btns2 {
  width: 470rpx;
  height: 88rpx;
  line-height: 88rpx;
  border-radius: 100rpx;
  background-color: rgba(9, 131, 246, 100);
  color: rgba(255, 255, 255, 100);
  font-size: 14px;
  text-align: center;
  box-shadow: 0px 4px 10px 0px rgba(118, 196, 244, 0.4);
  border: 1px solid rgba(255, 255, 255, 100);
  margin-left:75rpx;
}
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是微信小程序购物车多选全选的实现方法: 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: [] }); } }) ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值