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即可.反选也较为简单,也 ...
随机推荐
- kubeadm init 或 join 失败 [kubelet-check] Initial timeout of 40s passed.
前言 kubeadm 初始化或 join 时,报错: [etcd] Creating static Pod manifest for local etcd in "/etc/kubernet ...
- linux生成ssh密钥
前言 我们一般使用 PuTTY 等 SSH 客户端来远程管理 Linux 服务器.但是,一般的密码方式登录,容易有密码被暴力破解的问题.所以,一般我们会将 SSH 的端口设置为默认的 22 以外的端口 ...
- 通过百度地图 API V2.0 版本,进行地图坐标系转换
注意 先阅读参考链接 瞭月 的文章,再阅读本文. 其中,请求参数中 model 的含义: amap/tencent - 即:GCJ02 火星坐标系,由中国国家测绘局制订的地理信息系统的坐标系统. 由 ...
- golang的条件编译
写c/c++或者rust的开发者应该对条件编译不陌生,条件编译顾名思义就是在编译时让代码中的一部分生效或者失效,从而控制编译时的代码执行路径,进而影响编译出来的程序的行为. 这有啥用呢?通常在编写跨平 ...
- 应用引入LLM实践
LLM最近在各行各业遍地开花,产生了很好的效果,也落地了很多好的功能应用. 无论是从实际应用角度,还是从营销角度,我们都需要接入大模型能力. 拿国内比较火的Deepseek来说,具有良好的推理能力,可 ...
- PyInstaller 常用用法
PyInstaller 常用用法 PyInstaller 是一个跨平台的 Python 应用打包工具,支持 Windows/Linux/MacOS 三大主流平台,能够把 Python 脚本及其所在的 ...
- 【跟K8S学设计】Informer全分析-Reflector(上)
鉴于Informer架构及其处理逻辑蕴含了丰富的实战技术,本文将分为上下两章进行深入探讨. 上篇将专注于解析Informer中的Reflector组件,而下篇则会详尽分析Indexer模块.通过这种结 ...
- el-table-column动态判断显示性别男女
<el-table-column label="性别" width="60" align="center" prop="ge ...
- Sentinel源码—2.Context和处理链的初始化
大纲 1.Sentinel底层的核心概念 2.Sentinel中Context的设计思想与源码实现 3.Java SPI机制的引入 4.Java SPI机制在Sentinel处理链中的应用 5.Sen ...
- Win10/win11系统如何禁用笔记本自带键盘、笔记本键盘禁用后无法恢复解决办法【靠谱】
原文:[靠谱]Win10/win11系统如何禁用笔记本自带键盘.禁用后无法恢复解决办法 - 搜栈网 (seekstack.cn)