今天研究了一下微信小程序,同事有一个问题,希望实现点击一个复选选中多个复选的,取消一个复选取消多个复选 大复选不影响单个复选,在这里记录一下,因为写的是暂时实现,效率特别低,如果大家有什么好的想法欢迎留言!
wxml:
<form bindsubmit="formSubmit" bindreset="formReset"> <view>
<view>checkbox</view>
<checkbox-group name="city" bindchange="shengChange"> <view wx:for="{
{sheng}}">
<label><checkbox value="{
{item.areaprovincecode}}"/>{
{item.areaprovince}}</label>
<view wx:for="{
{item.areaCityList}}">
<label><checkbox checked='{
{item.checked}}' value="{
{item.areaprovincecode}}"/>{
{item.areaprovince}}</label>
</view>
</view>
</checkbox-group> </view> <view>
<button formType="submit">Submit</button>
<button formType="reset">Reset</button> </view> </form>
js:
首先有一个顶级变量
//用来存储选中的省的值 var checkedId=[];
shengChange :function(e){
//总地区
var list=this.data.sheng;
//当前选中的所有复选框值
var pagelist = e.detail.value;
for (var a = 0; a < list.length;a++){
//先是新增复选 当前选择循环>已选择省份循环
for (var b = 0; b < pagelist.length;b++){
if (list[a].areaprovincecode == pagelist[b]){
if (checkedId.length==0){
checkedId.push(pagelist[b]);
for (var h = 0; h < list[a].areaCityList.length; h++) {
this.setData({
["sheng[" + a + "].checked"]: true,
["sheng[" + a + "].areaCityList[" + h + "].checked"]: true
})
}
}else{
var xz=true;
for (var z = 0; z < checkedId.length;z++){
if (pagelist[b] == checkedId[z]){
xz=false;
}
}
if (xz){
checkedId.push(pagelist[b]);
for (var h = 0; h < list[a].areaCityList.length; h++) {
this.setData({
["sheng[" + a + "].checked"]: true,
["sheng[" + a + "].areaCityList[" + h + "].checked"]: true
})
}
}
}
}
}
//后是删除省复选 已选择省份循环>当前选择省份循环
for (var c = 0; c < checkedI