Select 组件实现【全选】(基于 Element)
〇、前言
在 Element 中,Select 组件支持单选和多选,但是并没有全选的属性,因此只能通过其事件和属性来实现,本文将实现一个简单的示例。
注意:本文的示例中,通过 leixing1 来兼容多控件共享同一方法。
一、两种实现
1.1 通过添加一个 Checkbox 来操作全选(推荐)
- 大致思路
在全部选项最上边添加一个 Checkbox 复选框,勾选时自动全选,取消勾选自动取消全部已选中项。
再给 Select 添加一个 Change 事件方法,当选中项等于备选列表长度,则自动勾选 Checkbox,否则取消勾选。
- 实现效果

- 前端实现代码
<el-select
class="select-item uniform-width"
v-model="formData.leixing1"
filterable multiple
clearable @change="changeSelect($event,'leixing1')"
placeholder="全部类型(多选)"
>
<el-checkbox :indeterminate="isIndeterminate_lx" v-model="checked" @change="selectAll('leixing1')" style="padding:5px 0 10px 20px;">全选</el-checkbox>
<el-option
v-for="item in leixing1OptionsList"
:label="item.mingcheng"
:value="item.bianma"
:key="item.bianma"
/>
</el-select>
- js 代码实现
<script>
export default {
name: "Example",
data() {
return {
isIndeterminate:false,
isIndeterminate_lx1:false,
isIndeterminate_lx2:false,
checked:false,
checked_lx1:false,
checked_lx2:false,
formData:[],
leixing1OptionsList:[
{mingcheng:"第1项",bianma:"1"},
{mingcheng:"第2项",bianma:"2"},
{mingcheng:"第3项",bianma:"3"},
],
leixing2OptionsList:[],
};
},
methods: {
changeSelect(val,leixing) {
let list=[]
let value=""
switch (leixing){ // 根据不同的组件对取值进行区分
case "leixing1":
list=this.leixing1OptionsList
this.checked=this.checked_lx1
break
case "leixing2":
list=this.leixing2OptionsList
this.checked=this.checked_lx2
break
}
if (this.formData[leixing].length==list.length) { // 全选
this.checked=true
this.isIndeterminate=false
} else if (this.formData[leixing].length!=list.length && this.formData[leixing].length>0) {
this.checked=false
this.isIndeterminate=true
}else if(this.formData[leixing].length==0){
this.isIndeterminate=false
}
switch (leixing){
case "leixing1":
this.checked_lx1=this.checked
this.isIndeterminate_lx1=this.isIndeterminate
break
case "leixing2":
this.checked_lx2=this.checked
this.isIndeterminate_lx2=this.isIndeterminate
break
}
},
selectAll(leixing) {
let list=[]
let value=""
switch (leixing){ // 根据不同的组件对取值进行区分
case "leixing1":
list=this.leixing1OptionsList
this.checked=this.checked_lx1
this.isIndeterminate_lx1=false
value="bianma" // 具体的取值属性配置
break
case "leixing2":
list=this.leixing2OptionsList
this.checked=this.checked_lx2
this.isIndeterminate_lx2=false
value="key" // 具体的取值属性配置
break
}
if (this.checked) { // 全选
list.map((item) => {
this.formData[leixing].push(item[value])
})
} else { // 取消全选
this.formData[leixing] = [];
}
},
},
};
</script>
1.2 通过增加一个 Option 选项‘全选’来实现
- 大致思路
手动增加 Select 的第一个选项‘全选’,通过这个选项的事件,来操作是否全选。
再通过列表的长度和已选中的选项进行比较,相等就自动勾选‘全选’,否则就取消勾选。
注意:Select 组件的值会包含‘全选’这个值,需要在后端进行过滤。
- 实现效果

- 前端控件代码
<el-select
class="select-item uniform-width"
v-model="formData.leixing1"
filterable multiple
clearable @change="changeSelect($event,'leixing1')"
placeholder="全部类型(多选)"
>
<el-option label='全选' value='全选' @click.native="selectAll('leixing1')" v-if="leixing1OptionsList.length"></el-option>
<el-option
v-for="item in leixing1OptionsList"
:label="item.mingcheng"
:value="item.bianma"
:key="item.bianma"
/>
</el-select>
- js 代码实现及解释
<script>
export default {
name: "Example",
data() {
return {
formData:[],
leixing1OptionsList:[
{mingcheng:"第1项",bianma:"1"},
{mingcheng:"第2项",bianma:"2"},
{mingcheng:"第3项",bianma:"3"},
],
leixing2OptionsList:[],
};
},
methods: {
changeSelect(val,leixing) {
let list=[]
let value=""
switch (leixing){ // 根据不同的组件对取值进行区分
case "leixing1":
list=this.leixing1OptionsList
break
case "leixing2":
list=this.leixing2OptionsList
break
}
if (!val.includes('全选') && val.length === list.length) { // 手动选择全部选项后,自动选中‘全选’
this.formData[leixing].unshift('全选')
} else if (val.includes('全选') && (val.length - 1) < list.length) { // 取消选中任一项,同时取消‘全选’
this.formData[leixing] = this.formData[leixing].filter((item) => { return item !== '全选'})
}
},
selectAll(leixing) {
let list=[]
let value=""
switch (leixing){ // 根据不同的组件对取值进行区分
case "leixing1":
list=this.leixing1OptionsList
value="bianma" // 具体的取值属性配置
break
case "leixing2":
list=this.leixing2OptionsList
value="key" // 具体的取值属性配置
break
}
if (this.formData[leixing]!=undefined && this.formData[leixing].length < list.length) { // 全选
this.formData[leixing] = ['全选'] // 默认选中‘全选’这一项
list.map((item) => { // 将全部选项加入值列表
this.formData[leixing].push(item[value])
})
} else { // 取消全选
this.formData[leixing] = [];
}
},
},
};
</script>
Select 组件实现【全选】(基于 Element)的更多相关文章
- element-ui组件,全选树节点,新增数据子节点数据,出现回填问题
案情分析:全选后父节点被选中保存,在这个树节点下新增数据时,就会出现,也被选中,事实上数据是没有被选中,也就意味着权限未被配置,而显示是已经配置了,显然这个是一个bug 1.处理前,直接用下面的方法很 ...
- react-native IOS TextInput长按提示显示为中文(select | selectall -> 选择 | 全选)
根据手机系统语言(简体中文/英文),提示不同的长按效果 长按提示效果图 英文长按提示 中文长按提示 解决 1.手机系统语言为简体中文: 设置->通用->语言与地区 2.ios/项目/inf ...
- 关于Element UI中select组件中遇到的问题
问题一:在使用select组件设置多选功能后,窗口抖动问题? 详细描述:在我使用select做多选的功能时出现了窗口抖动的问题,测试的时候发现,在有些人的电脑上抖动,有些人的电脑上不抖,找了很多文档, ...
- JS实战 · 复选框全选操作
思路: 1.获取被选中checkbox,通过checked属性的状态完成: 2.获取被选中的checkbox的value值: 3.求所有value的和sum: 4.定义span区域存储和sum: ...
- js复选框全选反选
本篇文章是关于复选框的,有2种形式:1.全选.反选由2个按钮实现:2.全选.反选由一个按钮实现. <!DOCTYPE html> <html> <head> < ...
- jQuery_完成复选框的全选与全不选
别的不多说,直接上代码,用于完成复选框的全选与全不选. <!DOCTYPE html> <html> <head> <meta charset="U ...
- element-ui select组件中复选时以字符串形式显示
我使用的element-ui的版本是1.4.13. 如上图所示,使用el-select组件,要实现可搜索.可复选.可创建条目时,展示样式是如上图所示,输入框的高度会撑开,影响页面布局,按照产品的需求, ...
- vue结合element-ui 的select 全选问题
下拉列表多选 问题 通过操作 所有来进行全选 全不选问题 element-ui 中 select 记录下自己最近使用element-ui 中的 select多选问题 在element中默认是指单纯多选 ...
- krry-transfer ⏤ 基于 element 的升级版穿梭框组件发布到 npm 啦
博客地址:https://ainyi.com/81 基于 element ui 的==升级版穿梭框组件==发布到 npm 啦 看过我之前博客的同学或许知道我之前写过关于 element 穿梭框组件重构 ...
- 用javascript实现全选/反选组件
以下是本人制作的全选/反选 组件,供广大同行参考.指正: 效果如图: 在实现的过程中,全选和全部取消选中这两个功能较为简单,只需用for循环遍历所有复选框为true或false即可.反选也较为简单,也 ...
随机推荐
- Sql 字符串截取
注意 不同数据库内置函数名称或有差异,可参考 1.从左至右截取 ①使用left()函数可以从左至右对字符串进行截取 语法:LEFT(str,length) str是要进行截取的字符串,length是要 ...
- Docker图形化工具Portainer安装
Docker方式安装 我们可以直接使用 **Docker** 的方式来安装 首先创建数据卷,实现数据持久化 docker volume create portainer_db 启动 **Partain ...
- Proxmox ve(Pve) 安装windows server
1.安装proxmox ve点击直达 官网地址 下载下来如果下载速度太慢 可以去安装个IDM https://www.52pojie.cn/thread-1013874-1-1.html 然后需要制作 ...
- CENTOS 7 使用Docker安装oracle 11g
1.docker第一次安装失败,下一次会提示同名的容器已经存在,解决办法: docker container ls -a 根据上面执行的接口,选择一个containerid,然后带入到下面的命令 do ...
- [源码系列:手写spring] IOC第十四节:容器事件和事件监听器
代码分支 https://github.com/yihuiaa/little-spring/tree/event-and-event-listenerhttps://github.com/yihuia ...
- 【Docker】常用服务镜像安装
Docker常用安装 总体步骤 搜索镜像:docker search xxx 拉取镜像:docker pull xxx 查看镜像:docker images 启动镜像:docker run xxx 停 ...
- 使用 AutoGen Studio 打造你的私有团队
AI Agent 无疑是今年最火爆的概念,从科技巨头的战略布局到创业公司的创新产品,AI 智能体正在重塑我们与机器交互的方式.无论是自动化任务.个性化服务,还是复杂问题的协同解决,AI Agent 都 ...
- 工会成立100周年纪念,开发职工健身AI运动小程序、APP方案推荐
时光荏苒,转眼间2025年五一将至,这一年对于中华全国总工会而言,具有非凡的历史意义--它将迎来成立100周年的辉煌时刻.为了庆祝这一盛事,各级工会组织将精心筹备了一系列丰富多彩.形式多样的纪念活动, ...
- 深度优先及广度优先在Unity中的应用
说明: 简单总结一下深度优先算法和广度优先算法在Unity中最直观和最多见的使用.这里我所举的例子是应用到Unity中3D 人物的全部骨骼关键的遍历,推广开就是能够对全部物体的层级关系进行简单的遍历. ...
- 在Winform开发框架支持多种数据库基础上,增加对国产数据库人大金仓的支持
一个良好的产品,可能往往需要支持多种数据库的接入,根据实际业务的需要进行调整,有时候可能需要2到3种数据库的支持. 在很多应用系统里面,虽然一般采用一种数据库运行,但是由于各种情况的需要,可能业务系统 ...