微信小程序-单选按钮实现

逻辑

  • 单选框的逻辑比较简单,把所有的元素遍历出来,等到点击单选按钮的时候,当value值与遍历变量值一致的时候就 把checked 设置为true,其他的时候把checked设置为 false 只需要一次循环。
  • 复选框的逻辑,也不复杂,当只有一个被选中的选项的时候,当点击已经选择的选项的时候,首选外层循环设置为false,这个时候 e.detail.value为零,所以无法进入内层循环,所以被取消。当选中未选择的选项的时候,则从第一个选项开始遍历,如果value值与外层相同则设置为TRUE。然后跳出内层,继续遍历,当有两个选中的选项的时候,点击已经选择的按钮,values值会减少l,所以最后一次的外层循环无法进入内层,所有取消该选项。

举例, 两选一 , 默认选中第一个;效果图如下:在这里插入图片描述

.wxml文件 :

<view class='button_container'>
  <block wx:for="{{buttons}}" wx:key="buttons">
    <button class='{{item.checked?"checked_button":"normal_button"}}' data-id='{{item.id}}' bindtap='radioButtonTap'>{{item.name}}</button>
  </block>
</view>

.js文件 :

Page({
  data:{
    buttons: [{ id: 1, name: '失物招领' }, { id: 2, name: '寻物启事' }]
  },
  onLoad: function() {//默认选了第一个
    this.data.buttons[0].checked = true;
    this.setData({
      buttons: this.data.buttons,
    })
  },
   
  radioButtonTap: function (e) {
  console.log(e)
  let id = e.currentTarget.dataset.id
  console.log(id)
  for (let i = 0; i < this.data.buttons.length; i++) {
    if (this.data.buttons[i].id == id) {
      //当前点击的位置为true即选中
      this.data.buttons[i].checked = true;    
    }
    else {
      //其他的位置为false
    this.data.buttons[i].checked = false;
    }
  }
  this.setData({
  buttons: this.data.buttons
  })
  }
}) 

.wxss文件 :

.button_container{
  display: flex;
  flex-direction: row;
  justify-content: space-around
  }
  
  /* 按钮未选中 */
 .normal_button{
  background: white;
  }
  
  /* 按钮选中 */
  .checked_button{
  background: #36ab60;
  color: white
  }```

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
小程序中的 checkbox 组件默认是多选框,如果要实现单选按钮的效果可以采用以下两种方式: 1. 使用 radio 组件代替 checkbox 组件 radio 组件是单选框组件,只能选择其中一个选项。可以使用 radio-group 组件来将多个 radio 组件包裹在一起,这样就能实现单选按钮的效果。 示例代码: ```html <radio-group bindchange="onChange"> <label class="radio"> <radio value="A" checked="{{true}}">选项 A</radio> </label> <label class="radio"> <radio value="B">选项 B</radio> </label> <label class="radio"> <radio value="C">选项 C</radio> </label> </radio-group> ``` 2. 在 checkbox 组件上添加点击事件,手动实现单选按钮的效果 示例代码: ```html <checkbox-group bindchange="onChange"> <label class="checkbox"> <checkbox value="A" checked="{{true}}" data-name="A" data-checked="{{true}}" bindtap="onTap">选项 A</checkbox> </label> <label class="checkbox"> <checkbox value="B" data-name="B" data-checked="{{false}}" bindtap="onTap">选项 B</checkbox> </label> <label class="checkbox"> <checkbox value="C" data-name="C" data-checked="{{false}}" bindtap="onTap">选项 C</checkbox> </label> </checkbox-group> ``` JS代码: ```javascript Page({ data: { items: [ {name: 'A', checked: true}, {name: 'B', checked: false}, {name: 'C', checked: false}, ], }, onTap: function(event) { var name = event.currentTarget.dataset.name; var checked = event.currentTarget.dataset.checked; var items = this.data.items; for (var i = 0; i < items.length; i++) { if (items[i].name == name) { items[i].checked = !checked; } else { items[i].checked = false; } } this.setData({ items: items, }); }, onChange: function(event) { console.log(event.detail.value); }, }); ``` 在 onTap 函数中,首先获取当前点击的选项的名称和状态(是否选中),然后遍历所有选项,将当前选项设置为选中状态,其它选项设置为未选中状态。最后调用 setData 函数更新数据即可。注意要将 checkbox 的 checked 属性设置为 false,否则会出现多选的情况。 以上两种方式都可以实现单选按钮的效果,具体选择哪一种方式取决于具体需求。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值