完美解决微信小程序使用复选框van-checkbox无法选中

文章讲述了在使用vant-ui框架开发微信小程序时,checkbox组件点击无法选中的问题,通过添加onChange事件并更新checked值来解决,同时展示了选中和取消选中的效果。

由于小程序使用了vant-ui框架,导致checkbox点击无法选中问题 

<van-checkbox value="{{ checked }}" shape="square">
          <view class="check-content">
            <view class="checktext">我已阅读并同意>《用户协议》《隐私政策》</view>
          </view>
</van-checkbox>

记得定义checked 默认值

 解决办法 :添加onChange事件,给checked 做赋值操作。

<van-checkbox value="{{ checked }}" shape="square" bind:change="onChange">
          <view class="check-content">
            <view class="checktext">我已阅读并同意《用户协议》《隐私政策》</view>
          </view>
</van-checkbox>
onChange(e){
    this.setData({
      checked: e.detail
    })
},

可以打印看看console.log(e)

  • 选中效果:

  • 取消选中效果: 

 

在 `van-list` 与 `checkbox` 结合使用时实现全选和反选功能,可通过设置一个全选复选框来控制所有列表项的选中状态。以下分别给出 Vue 和微信小程序的实现示例。 ### Vue 实现示例 ```vue <template> <div> <van-list v-model="loading" :finished="finished" finished-text="没有更多了" @load="onLoad" > <van-checkbox-group v-model="selectedIds"> <van-checkbox v-for="item in list" :key="item.id" :name="item.id" > <van-cell :title="item.title" /> </van-checkbox> </van-checkbox-group> </van-list> <van-checkbox v-model="checkedAll" @change="toggleAll">全选</van-checkbox> </div> </template> <script> import { VanList, VanCheckbox, VanCheckboxGroup, VanCell } from 'vant'; export default { components: { VanList, VanCheckbox, VanCheckboxGroup, VanCell }, data() { return { list: [], loading: false, finished: false, selectedIds: [], checkedAll: false }; }, methods: { onLoad() { // 模拟异步请求 setTimeout(() => { for (let i = 0; i < 10; i++) { this.list.push({ id: this.list.length + 1, title: `Item ${this.list.length + 1}` }); } // 加载状态结束 this.loading = false; // 数据全部加载完成 if (this.list.length >= 40) { this.finished = true; } }, 1000); }, toggleAll() { if (this.checkedAll) { this.selectedIds = this.list.map(item => item.id); } else { this.selectedIds = []; } } } }; </script> ``` ### 微信小程序实现示例 在 `app.json` 中引入组件: ```json { "usingComponents": { "van-list": "/path/vant-weapp/list/index", "van-checkbox": "/path/vant-weapp/checkbox/index", "van-checkbox-group": "/path/vant-weapp/checkbox-group/index", "van-cell": "/path/vant-weapp/cell/index" } } ``` 在 `.wxml` 文件中使用组件: ```xml <van-list loading="{{loading}}" finished="{{finished}}" finished-text="没有更多了" bind:load="onLoad" > <van-checkbox-group bind:change="onChange" value="{{selectedIds}}"> <block wx:for="{{list}}" wx:key="id"> <van-checkbox name="{{item.id}}"> <van-cell title="{{item.title}}" /> </van-checkbox> </block> </van-checkbox-group> </van-list> <van-checkbox value="{{checkedAll}}" bind:change="toggleAll">全选</van-checkbox> ``` 在 `.js` 文件中实现逻辑: ```javascript Page({ data: { list: [], loading: false, finished: false, selectedIds: [], checkedAll: false }, onLoad() { // 模拟异步请求 setTimeout(() => { const newList = []; for (let i = 0; i < 10; i++) { newList.push({ id: this.data.list.length + i + 1, title: `Item ${this.data.list.length + i + 1}` }); } this.setData({ list: this.data.list.concat(newList), loading: false }); if (this.data.list.length >= 40) { this.setData({ finished: true }); } }, 1000); }, onChange(e) { const selectedIds = e.detail; const checkedAll = selectedIds.length === this.data.list.length; this.setData({ selectedIds, checkedAll }); }, toggleAll(e) { const checkedAll = e.detail; if (checkedAll) { const allIds = this.data.list.map(item => item.id); this.setData({ selectedIds: allIds, checkedAll: true }); } else { this.setData({ selectedIds: [], checkedAll: false }); } } }); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

船长在船上

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值