微信小程序多选,全选

1,页面样式

微信小程序中不能直接在wxml使用includes,否则不起作用,可通过 wxs 实现

<wxs module="module">
  module.exports.includes = function (array, searchElement) {
    return array.indexOf(searchElement) !== -1
  } 
</wxs>

<view>

<!-- 多选 -->
<view class="pd-tb30" style="border-bottom: 1rpx solid #EEE;" wx:for="{{list}}">
    <view class="p-flex-sb" bindtap="checkboxChange" data-id="{{item.id}}">
        <view class="p-flex">
            <view class="common_icon {{ module.includes(checkedIds,item.id) ? 'icon-a-100 theme' : 'icon-a-99 col-d9'}} icon-font-20 m-r30"></view>
            <view>
                <view>{{item.remark}} 
                      <text class="font-16-28 white black-bg pd-lr10 radius10">电子</text>
                </view>
                <view class="col-a6 font-16-28">{{item.tradeTime}}</view>
             </view>
        </view>
        <view class="p-flex-center">¥{{item.tradeAmt}}元</view>
    </view>
</view>

<!-- 全选 -->
<view class="white-bg col-a6 font-17-24 scanCodeCharging">
    <view class="p-flex">
        <view class="p-flex-center">
            <view class="p-flex-center m-r20" bindtap="selectAll" data-checkedAll="{{checkedAll}}">
                <view class="common_icon {{ checkedAll === true ? 'icon-a-100 theme' : 'icon-a-99 col-d9' }} icon-font-20 m-r20"></view>
                 <view>全选</view>
            </view>
            <view>30张</view>
        </view>
        <view class="p-flex-center">
            <view>共计:<text class="theme imb m-r20">¥98.00</text></view>
            <view class="pd-lr50 pd-tb20 radius50 theme-bg white" bindtap="toChargeByScan">开票</view>
        </view>
    </view>
</view>

</view>

2,事件

Page({
  /**
   * 页面的初始数据
   */
  data: {
    list:[
      {id:"1111",remark:'停车位',tradeTime:'2021-6-2 16:08',tradeAmt:'24.00'},
      {id:"2222",remark:'停车位',tradeTime:'2021-6-2 16:08',tradeAmt:'24.00'},
      {id:"3333",remark:'停车位',tradeTime:'2021-6-2 16:08',tradeAmt:'24.00'},
      {id:"4444",remark:'停车位',tradeTime:'2021-6-2 16:08',tradeAmt:'24.00'},
      {id:"5555",remark:'停车位',tradeTime:'2021-6-2 16:08',tradeAmt:'24.00'},
      {id:"6666",remark:'停车位',tradeTime:'2021-6-2 16:08',tradeAmt:'24.00'},
      {id:"7777",remark:'停车位',tradeTime:'2021-6-2 16:08',tradeAmt:'24.00'},
      {id:"8888",remark:'停车位',tradeTime:'2021-6-2 16:08',tradeAmt:'24.00'},
      {id:"9999",remark:'ccccc',tradeTime:'2021-6-2 16:08',tradeAmt:'66.00'},
    ], 
    checkedIds:[],  // 数据列表
    checkedAll:false  // 选中的id列表,
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {

  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }, 

  /**
   * 多选
   */
  checkboxChange(e) { 
    let id = this.data.checkedIds.indexOf(e.currentTarget.dataset.id);
    //已经选中就删除,没有就添加
    if(id > -1){  
      this.data.checkedIds.splice(id,1);
    }else{
      this.data.checkedIds.push(e.currentTarget.dataset.id);
    }
    // 全部选中就显示全选,没有就不显示
    if(this.data.checkedIds.length === this.data.list.length){
      this.setData({checkedAll:true});
    }else{
      this.setData({checkedAll:false});
    }
    this.setData({checkedIds : this.data.checkedIds});
  },

  /**
   * 全选
   */
  selectAll(e){ 
    if (e.currentTarget.dataset.checkedall === false) {
        this.setData({checkedIds:this.data.list.map(item=>item.id),checkedAll:true})
    } else { 
      // 直接清空列表
      this.setData({checkedIds:[],checkedAll:false});
    }
  }
})

  • 1
    点赞
  • 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、付费专栏及课程。

余额充值