微信小程序:实现单选,多选,通过变量控制单选/多选

一、实现单选功能

微信小程序提供了 radio 组件来实现单选功能。radio 组件需要配合 radio-group 使用。

1. WXML 代码

html 复制代码
<radio-group bindchange="onRadioChange">
  <label wx:for="{{items}}" wx:key="id">
    <radio value="{{item.value}}" checked="{{item.checked}}" /> {{item.name}}
  </label>
</radio-group>

2. JS 代码

javascript 复制代码
Page({
  data: {
    items: [
      { id: 1, name: '选项A', value: 'A', checked: false },
      { id: 2, name: '选项B', value: 'B', checked: false },
      { id: 3, name: '选项C', value: 'C', checked: false }
    ]
  },

  // 单选按钮变化事件
  onRadioChange(e) {
    const value = e.detail.value; // 获取选中的值
    const items = this.data.items.map(item => {
      item.checked = item.value === value; // 更新选中状态
      return item;
    });

    this.setData({ items });
    console.log('选中的值:', value);
  }
});

3. 实现效果

  • 用户只能选择一个选项。

  • 选中的值会通过 onRadioChange 事件返回。


二、实现多选功能

微信小程序提供了 checkbox 组件来实现多选功能。checkbox 组件需要配合 checkbox-group 使用。

1. WXML 代码

html 复制代码
<checkbox-group bindchange="onCheckboxChange">
  <label wx:for="{{items}}" wx:key="id">
    <checkbox value="{{item.value}}" checked="{{item.checked}}" /> {{item.name}}
  </label>
</checkbox-group>

2. JS 代码

javascript

javascript 复制代码
Page({
  data: {
    items: [
      { id: 1, name: '选项A', value: 'A', checked: false },
      { id: 2, name: '选项B', value: 'B', checked: false },
      { id: 3, name: '选项C', value: 'C', checked: false }
    ]
  },

  // 多选按钮变化事件
  onCheckboxChange(e) {
    const values = e.detail.value; // 获取选中的值数组
    const items = this.data.items.map(item => {
      item.checked = values.includes(item.value); // 更新选中状态
      return item;
    });

    this.setData({ items });
    console.log('选中的值:', values);
  }
});

3. 实现效果

  • 用户可以选择多个选项。

  • 选中的值会通过 onCheckboxChange 事件返回一个数组。


三、自定义单选和多选

如果你不想使用 radio 或 checkbox 组件,可以通过自定义逻辑实现单选和多选功能。

1. WXML 代码

html 复制代码
<view class="container">
  <view wx:for="{{items}}" wx:key="id" class="item {{item.checked ? 'active' : ''}}" bindtap="onItemTap" data-index="{{index}}">
    {{item.name}}
  </view>
</view>

2. JS 代码

javascript

javascript 复制代码
Page({
  data: {
    items: [
      { id: 1, name: '选项A', value: 'A', checked: false },
      { id: 2, name: '选项B', value: 'B', checked: false },
      { id: 3, name: '选项C', value: 'C', checked: false }
    ],
    isMultiple: false // 是否多选
  },

  // 点击选项事件
  onItemTap(e) {
    const index = e.currentTarget.dataset.index; // 获取点击的索引
    const items = this.data.items;

    if (this.data.isMultiple) {
      // 多选逻辑
      items[index].checked = !items[index].checked;
    } else {
      // 单选逻辑
      items.forEach((item, i) => {
        item.checked = i === index;
      });
    }

    this.setData({ items });
    console.log('当前选中的值:', items.filter(item => item.checked).map(item => item.value));
  }
});

3. WXSS 代码

css 复制代码
.container {
  padding: 20px;
}

.item {
  padding: 10px;
  margin-bottom: 10px;
  border: 1px solid #ccc;
  text-align: center;
}

.active {
  background-color: #07c160;
  color: white;
}

4. 实现效果

单选

多选

  • 点击选项时,根据 isMultiple 的值决定是单选还是多选。

  • 选中的选项会高亮显示。


四、总结

功能 使用组件 特点
单选 radio + radio-group 只能选择一个选项
多选 checkbox + checkbox-group 可以选择多个选项
自定义选择 无组件,通过逻辑实现 更灵活,可以自定义样式和交互逻辑
相关推荐
李纲明9 小时前
微信小程序真机预览白屏或 request 失败:先核 request 合法域名与 TLS,再查体验版与本地缓存
缓存·微信小程序·小程序·小程序开发·devdiy·真机预览·合法域名
klfdgl10 小时前
线上商城小程序投入测算,有成熟开发经验服务商的长期收益对比
小程序
一木 之林1 天前
Dify学习笔记 03 · RAG检索增强生成:三代范式、评估与落地(第40-45、55-56集)
笔记·小程序·交互·dify
赵小哥要冲啦1 天前
社区邻里互助小程序从 0 到 1 复盘:需求拆解与信任机制设计
java·小程序·需求分析
河北清兮网络科技1 天前
石家庄做一套企业知识库系统多少钱?2026 报价明细
小程序·短剧app·广告联盟
Ai-_Man1 天前
Coze扣子还是不可以导出左侧所有对话,只能点进去单条内容导出,方法不对吗?
开发语言·人工智能·ai·小程序·1024程序员节
微订校园外卖平台1 天前
新手做校园外卖平台:小程序启动顺序与订单链路验收
小程序·外卖系统·本地生活·微订
计算机毕设定制辅导-无忧学长2 天前
《基于物品协同过滤的闲置书换购微信小程序设计开发》
java·vue.js·spring boot·微信小程序·uniapp·闲置书换购微信小程序·物品协同过滤算法
ngaiwe2 天前
AA我来算小程序实践:把付款人、承担人和结算状态分开建模
微信小程序
FX1317887KP_2 天前
KET口语Part 2看图对话怎么练?“观察—提问—回应”;三步法讲透
小程序·ket口语·pet口语·fce备考·剑桥英语