Checkbox 多选框限制选择个数,超出限制的个数后其他选项禁止选择

最近项目开发中,有一个关于 checkbox多选框限制选择 个数的需求,具体要求如下:

具体需求:

  • 多选框最多选4个
  • 选满4个后,其他选项变成禁用(disable)状态
  • 取消已选择的选项后,可以继续选择其他选项

需求分析完后开始写代码实现:

项目使用Vue3,UI框架采用Ant-design-vue@4.x版本

  • 在一组可选项中进行多项选择时;
  • 单独使用可以表示两种状态之间的切换,和 switch 类似。区别在于切换 switch 会直接触发状态改变,而 checkbox 一般用于状态标记,需要和提交操作配合。

由于项目中的选项是从接口获取到的列表,所以用到了Ant-design-vue中的list组件。 看了Checkbox的文档后,用CheckboxGroup内嵌Checkbox实现比较方便: CheckboxGroup中的value选中的内容满足条件就可以将未选择的内容禁用,将Checkbox的disabled属性设为true即可。

源代码:

js 复制代码
<template>
    <a-checkbox-group v-model:value="selectedTeams">
      <a-list :grid="{ gutter: 10, column: 5 }" :data-source="dataSource">
        <template #renderItem="{ item }">
          <a-list-item>
            <template #extra>
              <a-checkbox :value="item.id" name="team"
                :disabled="(selectedTeams.length >= 4 && selectedTeams.includes(item.id) === false ? true : false)">{{ item.title }}</a-checkbox>
            </template>
          </a-list-item>
        </template>
      </a-list>
    </a-checkbox-group>
</template>
<script steup>
    const selectedTeams = ref([]) // 选中的球队
    const dataSource = ref([
      { id: '1', title: '利物浦' },
      { id: '2', title: '曼城' },
      { id: '3', title: '阿森纳' },
      { id: '4', title: '维拉' },
      { id: '5', title: '热刺' },
      { id: '6', title: '曼联' },
      { id: '7', title: '纽卡斯尔' },
      { id: '8', title: '布莱顿' },
      { id: '9', title: '西汉姆联' },
      { id: '10', title: '切尔西' }
    ])
</script>

效果如下:

未选满4个时,其他选项还可以选择。

选满4个后,其他选项不可选择。

实现的关键点就是这句:

js 复制代码
:disabled="(selectedTeams.length >= 4 && selectedTeams.includes(item.id) === false ? true : false)"
  • 将每个选项与CheckboxGroup的值进行双向绑定
  • 根据规则选择球队个数,来限制选择个数
  • 利用ES6的 includes 判断所选球队的数组中是否含有对应的球队选项
  • 通过两个条件取并集,用三目运算符来为disabled属性负值,所得到的结果即为最终效果

至此,需求就实现了。本例为根据项目需求模拟的案例。

相关推荐
一 乐7 小时前
人口老龄化社区服务与管理平台|基于springboot+vue的人口老龄化社区服务与管理平台(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·人口老龄化社区服务与管理平台
喵个咪8 小时前
基于 Nuxt 4 的现代 Headless CMS 前端:架构深度解析与二次开发指南
前端·vue.js·nuxt.js
he___H10 小时前
B、B+树和vue部分知识
数据结构·vue.js·b树
书中枫叶10 小时前
我用 Vue3 写了一个 Chrome 步骤录制插件:自动截图、本地存储、一键导出教程
前端·vue.js
叶落阁主10 小时前
Vue3 中如何设计一套好用的 Icon 和 IconPicker 组件
前端·vue.js·icon
kungggyoyoyo10 小时前
从0开发一套geo优化软件:数据模型与API设计
前端·vue.js·后端
数据法师11 小时前
Alger Music Player 技术深度解析:基于 Electron + Vue 3 的开源网易云第三方客户端
vue.js·electron·开源
协享科技12 小时前
Vue 3 实现抖音式卡片滑动交互:从零到完整方案
前端·vue.js·交互·ai编程·英语·自考英语
_xaboy12 小时前
开源Vue组件FormCreate通过 JSON 生成TinyVue表单
前端·vue.js·低代码·开源·json·表单设计器
卤蛋fg613 小时前
给 vxe-table 设置全局默认参数:setConfig、setIcon 与 setTheme
vue.js