el-select可选择可搜索可输入新内容

需求:el-form-item添加el-select,并且el-select可选择可搜索可输入新内容,并且和其他的el-input做联动,如果是选择,那么el-input自动回填数据并且不可编辑,如果el-select输入新的内容,那么el-input也要输入新内容。

实现功能

  1. 可以搜索、选择、新增

1.效果

2.主要代码讲解

filterable:搜索

allow-create:允许用户创建新的内容

default-first-option:用户按下回车默认展示第一个匹配项

 @blur:失去焦点事件

 @change:选择值发生改变事件

@visible-change:下拉框出现或者隐藏触发

 ref="selectName":必须要设置ref来获取到选择的实例

这里如果是和我一样遍历出来的选择框那么需要再传递一个index

   <el-select:disabled="nameDisabled"v-model="item.name"placeholder="请选择名称"filterableref="selectName"allow-create@blur="nameBlur($event, index)"@visible-change="visibleNameChange($event, index)"@change="nameChange($event, index)"default-first-option><el-option v-for="item in equipNameOptions" :key="item.id" :label="item.name" :value="item.name"> </el-option></el-select>

 2.1失去焦点

  this.$set向响应式对象添加一个属性和值,这个就是在this.formTerminal中添加name属性和值,值就是输入框的内容

    nameBlur(e, index) {let value = e.target.value; // 输入框值if (value) {// this.$set向响应式对象添加一个属性和值,这个就是在this.formTerminal中添加name属性和值,值就是输入框的内容this.$set(this.formTerminal.attr[index], 'name', value);this.nameChange(value, index);}},

2.2值改变事件

 从匹配的选项中查找输入的内容是否相同,如果不相同则让性别重新输入并且取消禁用

    nameChange(val, index) {const foundItem = this.equipNameOptions.find((item) => item.name === val);this.isNameSelect = foundItem ? true : false;this.formTerminal.attr[index].age = foundItem ? foundItem.age : '';},

2.3 下拉框出现或者隐藏触发

必须要写这个,这个代码就是在下拉展开和关闭的时候触发失去焦点的事件,不然关闭和展开的时候不会触发失去焦点事件,导致错误

        visibleNameChange(val, i) {// console.log(i, this.$refs.selectName[i].selectedLabel, "下拉数据");if (!val) {let input = this.$refs.selectName[i].$children[0].$refs.input;input.blur();}}

3.完整代码

<template><div style="margin-top: 40px"><el-form class="terminal-form" ref="addOrEditSensorForm" :inline="true" :model="formTerminal" label-width="95px"><div class="terminal-box" v-for="(item, index) in formTerminal.attr" :key="index"><el-form-itemlabel="名称":prop="'attr.' + index + '.name'":rules="{required: true,message: '名称不能为空',trigger: 'blur'}"><el-select:disabled="nameDisabled"v-model="item.name"placeholder="请选择名称"filterableref="selectName"allow-create@blur="nameBlur($event, index)"@visible-change="visibleNameChange($event, index)"@change="nameChange($event, index)"default-first-option><el-option v-for="item in equipNameOptions" :key="item.id" :label="item.name" :value="item.name"> </el-option></el-select></el-form-item><el-form-item label="年龄" prop="age"><el-input v-model="item.age" placeholder="请输入终端名称" :disabled="isNameSelect"></el-input></el-form-item></div></el-form></div>
</template><script>
export default {data() {return {nameDisabled: false,formTerminal: {attr: [{name: '',age: ''}]},equipNameOptions: [{id: 1,name: '张三',age: 18},{id: 2,name: '李四',age: 32}],isNameSelect: false};},mounted() {},methods: {nameBlur(e, index) {let value = e.target.value; // 输入框值if (value) {// this.$set向响应式对象添加一个属性和值,这个就是在this.formTerminal中添加name属性和值,值就是输入框的内容this.$set(this.formTerminal.attr[index], 'name', value);this.nameChange(value, index);}},nameChange(val, index) {const foundItem = this.equipNameOptions.find((item) => item.name === val);this.isNameSelect = foundItem ? true : false;this.formTerminal.attr[index].age = foundItem ? foundItem.age : '';},visibleNameChange(val, i) {// console.log(i, this.$refs.selectName[i].selectedLabel, "下拉数据");if (!val) {let input = this.$refs.selectName[i].$children[0].$refs.input;input.blur();}}}
};
</script><style lang="scss" scoped></style>

文章到此结束,希望对你有所帮助~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/839848.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【NumPy】关于numpy.transpose()函数,看这一篇文章就够了

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

如何使用 CapSolver 扩展找到 Google reCAPTCHA 站点密钥?

网站安全性在当今至关重要&#xff0c;Google reCAPTCHA 作为防止垃圾邮件和滥用行为的前线防御系统起着关键作用。reCAPTCHA 站点密钥是确保网站交互由人类驱动的唯一标识符。了解如何找到这个密钥对于网站管理员和开发人员来说至关重要。 什么是 reCAPTCHA 站点密钥 reCAPT…

MySQL主从复制(一):主备一致

MySQL主备的基本原理 如图所示就是基本的主备切换流程&#xff1a; 在状态1中&#xff0c; 客户端的读写都直接访问节点A&#xff0c; 而节点B是A的备库&#xff0c; 只是将A的更新都同步过来&#xff0c; 到本地执行。 这样可以保持节点B和A的数据是相同的。 当需要切换的时候…

spark的简单学习一

一 RDD 1.1 RDD的概述 1.RDD&#xff08;Resilient Distributed Dataset&#xff0c;弹性分布式数据集&#xff09;是Apache Spark中的一个核心概念。它是Spark中用于表示不可变、可分区、里面的元素可并行计算的集合。RDD提供了一种高度受限的共享内存模型&#xff0c;即RD…

IDEA连接MySQL后如何管理数据库

上一节讲解了IDEA如何连接MySQL数据库管理系统&#xff0c;接下来我们就可以在IDEA里使用MySQL来管理数据库了。那么如果我们现在还没有创建需要的数据库怎么办&#xff1f;本节就来教大家如何在IDEA连接MySQL后管理数据库(创建/修改/删除数据库、创建/修改/删除表、插入/更新/…

电子招投标系统源码实现与立项流程:基于Spring Boot、Mybatis、Redis和Layui的企业电子招采平台

随着企业的快速发展&#xff0c;招采管理逐渐成为企业运营中的重要环节。为了满足公司对内部招采管理提升的要求&#xff0c;建立一个公平、公开、公正的采购环境至关重要。在这个背景下&#xff0c;我们开发了一款电子招标采购软件&#xff0c;以最大限度地控制采购成本&#…

【Vue2.x】props技术详解

1.什么是prop&#xff1f; 定义&#xff1a;组件标签上注册的一些自定义属性作用&#xff1a;向子组件传递数据特点 可以传递任意数量的prop可以传递任意类型的prop 2.prop校验 为了避免乱传数据&#xff0c;需要进行校验 完整写法 将之前props数组的写法&#xff0c;改为对象…

【SQL Server001】SQLServer2016常用函数实战总结(已更新)

1.熟悉、梳理、总结下SQL Server相关知识体系。 2.日常研发过程中使用较少&#xff0c;随着时间的推移&#xff0c;很快就忘得一干二净&#xff0c;所以梳理总结下&#xff0c;以备日常使用参考 3.欢迎批评指正&#xff0c;跪谢一键三连&#xff01; 总结源文件资源下载地址&am…

Ubuntu切换内核版本

#安装内核安装工具 sudo apt-get install software-properties-common sudo add-apt-repository ppa:cappelikan/ppa sudo apt-get update sudo apt-get install mainline#安装指定内核版本(有些版本并不能安装成功) mainline install 5.14.10#更新GRUB配置 sudo update-grub#查…

PE文件(六)新增节-添加代码

本节的目的是在所有节的空白区都不够存放我们要添加的代码时&#xff0c;教会我们新增一个足够大的节来添加代码 添加节 一.判断是否有足够的空间可以添加一个节表&#xff1a;新增节需要新增一个节表来记录此节信息 判断方法&#xff1a;SizeOfHeader - (DOS 垃圾数据 PE…

全网最全爬取-b站爬取弹幕+评论之js逆向与xml降本增效

&#x1f31f; ❤️ 作者&#xff1a;yueji0j1anke 首发于公号&#xff1a;剑客古月的安全屋 字数&#xff1a;801 阅读时间: 10min 声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及…

【C语言深度解剖】(14):结构体内存对齐(详细配图讲解)

&#x1f921;博客主页&#xff1a;醉竺 &#x1f970;本文专栏&#xff1a;《C语言深度解剖》 &#x1f63b;欢迎关注&#xff1a;感谢大家的点赞评论关注&#xff0c;祝您学有所成&#xff01; ✨✨&#x1f49c;&#x1f49b;想要学习更多C语言深度解剖点击专栏链接查看&…

缩进在编程中的重要性及正确使用方法

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 前言 缩进不当引发的问题 缩进的正确使用方法 缩进错误的调试与修复 总结 前言 在编程世…

Unity 资源 之 限时免费的Lowpoly农场动物,等你来领!

Unity资源 之 Lowpoly farm animals 农村动物 前言资源包内容领取兑换码 前言 Unity 资源商店为大家带来了一份特别的惊喜——限时免费的农场动物资源&#xff01;这是一个充满趣味和实用性的资源包。 资源包内容 在这个资源包中&#xff0c;你可以找到丰富多样的低地养殖动物…

Vue3路由配置

路由其实就是一组对应关系&#xff0c;将一个路径与一个组件对应起来&#xff0c;当路径发生变化&#xff0c;路由器就可以通过路由规则&#xff0c;找到当前路径对应的组件&#xff0c;并将该组件呈现到页面上 使用路由步骤&#xff1a; 1.终端输入 npm i vue-router 2.在App…

Softing工业将亮相2024年阿赫玛展会——提供过程自动化的连接解决方案

您可于2024年6月10日至14日前往美因河畔法兰克福11.0号馆&#xff0c;Softing将在C25展位展出&#xff0c;欢迎莅临&#xff01; 作为工业应用中数据交换领域公认的专家&#xff0c;Softing工业致力于帮助各行各业的客户部署网络自动化和优化生产流程。 使用Softing产品&…

如何在OpenHarmony上使用SeetaFace2人脸识别库?

简介 相信大部分同学们都已了解或接触过OpenAtom OpenHarmony&#xff08;以下简称“OpenHarmony”&#xff09;了&#xff0c;但你一定没在OpenHarmony上实现过人脸识别功能&#xff0c;跟着本文带你快速在OpenHarmony标准设备上基于SeetaFace2和OpenCV实现人脸识别。 项目效…

【Vue】Vue2路由

目录 路由作用Vue Router路由Vue Router路由的组成VueRouter常用的函数Vue Router的使用安装Vue Router创建router引入router使用 备注 Vue多级路由&#xff08;嵌套路由&#xff09;编写组件配置嵌套路由 Vue中的动态路由代码示例父组件Home.vue子组件路由配置 路由的 query 参…

黑龙江等保测评深入理解

“没有网络安全&#xff0c;就没有国家安全”&#xff0c;等级保护测评是指按照网络安全系统制定的一系列的防护过程&#xff0c;对已经有的和即将上线的商业服务的基础设施&#xff08;系统&#xff0c;数据库&#xff0c;中间件等&#xff09;所做的一系列的检查&#xff0c;…

HeyGen AI是什么?怎样使用HeyGen AI?

在数字时代&#xff0c;视频内容为王。无论是在社交媒体还是网站上&#xff0c;视频都以其独特的方式吸引着人们的眼球。然而&#xff0c;制作出专业水准的视频往往需要大量的时间和技术知识。HeyGen AI正是为了解决这一难题而诞生的。 HeyGen AI简介 HeyGen AI是一个创新的视…