index.wxml
<radio value="0" checked="{{allchecked}}" bindtap="selectAll" color="#d81e06" />全选商品列表 <view class="car-list" wx:for="{{car_list}}" wx:key="index" wx:for-item="item"> <radio checked="{{item.selected}}" bindtap="selectList" data-index="{{index}}" color="#d81e06" />{{item.title}} </view>
index.wxss
page{ font-size: 18px; }
index.js
Page({ data: { car_list: [ {'selected':true,'title':'手机'}, {'selected':true,'title':'电脑'}, {'selected':true,'title':'汽车'}, ], allchecked: false, }, // 全选事件 selectAll(e) { // 是否全选状态 var selectAllStatus = this.data.allchecked; selectAllStatus = !selectAllStatus; var dataList = this.data.car_list; for (let i = 0; i < dataList.length; i++) { // 改变所有商品状态 dataList[i].selected = selectAllStatus; } this.setData({ allchecked: selectAllStatus, car_list: dataList, }); }, // 选择事件 selectList(e) { // 获取data- 传进来的index let index = e.currentTarget.dataset.index; // 获取购物车列表 let dataArr = this.data.car_list; // 获取当前商品的选中状态 let selected = dataArr[index].selected; // 改变状态 dataArr[index].selected = !selected; this.setData({ car_list: dataArr }); // 改变全选状态 for (var i = 0; i < this.data.car_list.length; i++) { // 当状态为全选时,每个元素其中有一个为false,则取消全选 // 当状态为非全选时,每个元素都为true,则全选 if (this.data.allchecked) { if (!this.data.car_list[i].selected) { this.setData({ allchecked: false }); break; } } else { if (this.data.car_list[i].selected) { this.setData({ allchecked: true }); } else { this.setData({ allchecked: false }); break; } } } }, })