应用效果:从第一行输入1,按回车,聚焦到第二行输入2,按回车,聚焦到第三行……

一、通过元素 id,聚焦到下一行的输入框

关键技术点:

1、动态设置元素 id 属性为::id="`input-apply-amount-${(option as IReagentOption).id}`"

2、设置回车监听:@keyup.enter.native="onEnterPressDown((option as IReagentOption).id)"

                <el-input......:id="`input-apply-amount-${(option as IReagentOption).id}`"@keyup.enter.native="onEnterPressDown((option as IReagentOption).id)" />

3、通过 document.getElementById 获取到指定元素

4、focus 和 select,聚焦、全选

// 通过元素 id,聚焦到下一行的输入框
const focusNextRowByElementId = (objId: number) => {// 通过 objId 获取当前行索引let currentRowIndex = selectedOptionIds.value.indexOf(objId);// 下一行的输入框let nextInput: HTMLInputElement;if (currentRowIndex + 1 < selectedOptionIds.value.length) {// 下一行索引的 objIdlet nextRowObjId = selectedOptionIds.value[currentRowIndex + 1];nextInput = document.getElementById(`input-apply-amount-${nextRowObjId}`) as HTMLInputElement;} else {// 最后一行聚焦到申领用途输入框nextInput = document.getElementById("transfer-right-footer-purpose-input") as HTMLInputElement;}nextInput?.focus();nextInput?.select();
};

二、通过元素 ref,聚焦到下一行的输入框

关键技术点:

1、动态设置元素 ref 属性为::ref="`input-apply-amount-${(option as IReagentOption).id}`"

2、设置回车监听:@keyup.enter.native="onEnterPressDown((option as IReagentOption).id)"

                <el-input......:ref="`input-apply-amount-${(option as IReagentOption).id}`"@keyup.enter.native="onEnterPressDown((option as IReagentOption).id)" />

3、通过 getCurrentInstance() 获取当前组件实例,再通过 refs 获取到元素列表

4、focus 和 select,聚焦、全选

<script setup lang="ts" name="ReagentApplyDialog">
......
import { getCurrentInstance } from "vue";// 当前组件实例,相当 vue2 的this
const thisInstance = getCurrentInstance();// 通过元素 ref,聚焦到下一行的输入框
const focusNextRowByElementRef = (objId: number) => {if (!thisInstance) return;// 获取输入框实例 Recordlet refs = thisInstance.refs as Record<string, HTMLInputElement>;// 通过 objId 获取当前行索引let currentRowIndex = selectedOptionIds.value.indexOf(objId);if (currentRowIndex + 1 < selectedOptionIds.value.length) {// 下一行索引的 objIdlet nextRowObjId = selectedOptionIds.value[currentRowIndex + 1];// 聚焦到下一行的输入框refs[`input-apply-amount-${nextRowObjId}`].focus();refs[`input-apply-amount-${nextRowObjId}`].select();} else {// 最后一行聚焦到申领用途输入框refs["transfer-right-footer-purpose-input"].focus();refs["transfer-right-footer-purpose-input"].select();}
};
......
</script>

实例完整代码:

<script setup lang="ts" name="ReagentApplyDialog">
......
import { getCurrentInstance, nextTick, onMounted, ref, watch } from "vue";// 当前组件实例,相当 vue2 的this
const thisInstance = getCurrentInstance();// 按回车,申领数量输入框按回车
const onEnterPressDown = (objId: number) => {// 奇数if (objId % 2 === 1) {// 通过元素 id,聚焦到下一行的输入框focusNextRowByElementId(objId);}// 偶数else {// 通过元素 ref,聚焦到下一行的输入框focusNextRowByElementRef(objId);}
};// 通过元素 id,聚焦到下一行的输入框
const focusNextRowByElementId = (objId: number) => {// 通过 objId 获取当前行索引let currentRowIndex = selectedOptionIds.value.indexOf(objId);// 下一行的输入框let nextInput: HTMLInputElement;if (currentRowIndex + 1 < selectedOptionIds.value.length) {// 下一行索引的 objIdlet nextRowObjId = selectedOptionIds.value[currentRowIndex + 1];nextInput = document.getElementById(`input-apply-amount-${nextRowObjId}`) as HTMLInputElement;} else {// 最后一行聚焦到申领用途输入框nextInput = document.getElementById("transfer-right-footer-purpose-input") as HTMLInputElement;}nextInput?.focus();nextInput?.select();
};// 通过元素 ref,聚焦到下一行的输入框
const focusNextRowByElementRef = (objId: number) => {if (!thisInstance) return;// 获取输入框实例 Recordlet refs = thisInstance.refs as Record<string, HTMLInputElement>;// 通过 objId 获取当前行索引let currentRowIndex = selectedOptionIds.value.indexOf(objId);if (currentRowIndex + 1 < selectedOptionIds.value.length) {// 下一行索引的 objIdlet nextRowObjId = selectedOptionIds.value[currentRowIndex + 1];// 聚焦到下一行的输入框refs[`input-apply-amount-${nextRowObjId}`].focus();refs[`input-apply-amount-${nextRowObjId}`].select();} else {// 最后一行聚焦到申领用途输入框refs["transfer-right-footer-purpose-input"].focus();refs["transfer-right-footer-purpose-input"].select();}
};
......
</script><template>
......<el-transfer......><!-- 自定义列表数据项的内容 --><template #default="{ option }">......<el-inputv-if="selectedOptionIds.includes((option as IReagentOption).id)":ref="`input-apply-amount-${(option as IReagentOption).id}`":id="`input-apply-amount-${(option as IReagentOption).id}`"class="input-apply-amount"style="width: 85px; text-align: center"v-model="(option as IReagentOption).applyAmount"placeholder="输入申领数量"size="small"clearable@input="(option as IReagentOption).applyAmount = Number(formatToNumber($event, 0))"@keyup.enter.native="onEnterPressDown((option as IReagentOption).id)" />......</template></el-transfer>
......
</template>

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

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

相关文章

FramePack 全面测评:革新视频生成体验

在 AI 视频生成领域&#xff0c;FramePack 自问世便备受瞩目&#xff0c;它凭借独特的技术架构&#xff0c;号称能打破传统视频生成对高端硬件的依赖&#xff0c;让普通电脑也能产出高质量视频。此次测评&#xff0c;我们将全方位剖析 FramePack&#xff0c;探究它在实际应用中…

html中的table标签以及相关标签

表格标签可以通过指定的标签完成数据展示 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>表格标签</title> </head> <body><table border"2"><!-- tr是表行 r…

springboot+vue3+vue-simple-uploader轻松实现大文件分片上传Minio

最近在写视频课程的上传&#xff0c;需要上传的视频几百MB到几个G不等&#xff0c;普通的上传都限制了文件的大小&#xff0c;况且上传的文件太大的话会超时、异常等。所以这时候需要考虑分片上传了&#xff0c;把需要上传的视频分成多个小块上传到&#xff0c;最后再合并成一个…

AI 重构代码实战:如何用飞算 JavaAI 快速升级遗留系统?

在企业数字化进程中&#xff0c;遗留系统如同陈旧的基础设施&#xff0c;虽承载着重要业务逻辑&#xff0c;但因技术落后、架构复杂&#xff0c;升级维护困难重重。飞算 JavaAI 的出现&#xff0c;为遗留系统的二次开发带来了新的转机&#xff0c;其基于智能分析与关联项目的技…

鸿蒙运动开发实战:打造专属运动视频播放器

##鸿蒙核心技术##运动开发##Media Kit&#xff08;媒体服务&#xff09;# 在当今数字化时代&#xff0c;运动健身已经成为许多人生活的一部分。今天我将在应用中添加视频播放器&#xff0c;帮助用户在运动前、运动后更好地进行热身和拉伸。这篇文章将从代码核心点入手&#xf…

一个包含15个界面高质量的电商APP客户端UI解决方案

一个包含15个界面高质量的电商APP客户端UI解决方案 您可以将其用于电商APP应用项目。包含一系列完整的界面设计元素&#xff0c;包括欢迎页、登录、注册、首页、产品分类、产品详情、尺码选择、购物车、订单、支付&#xff0c;覆盖电商APP的大部分界面。每个部分都精心设计&…

执行 PGPT_PROFILES=ollama make run下面报错,

执行 PGPT_PROFILESollama make run 下面报错&#xff0c; File "/home/powersys/.cache/pypoetry/virtualenvs/private-gpt-ZIwX6JeM-py3.11/lib/python3.11/site-packages/qdrant_client/http/api_client.py", line 108, in send_inner raise ResponseHandling…

【Docker基础】Docker核心概念:命名空间(Namespace)之User详解

目录 引言 1 基础概念回顾 1.1 命名空间概述 1.2 命名空间的类型 2 User命名空间详解 2.1 基本概念 2.2 工作原理 User命名空间的工作流程 User命名空间架构 3 应用场景 4 配置与使用 5 总结 引言 随着容器化技术的广泛应用&#xff0c;Docker已成为现代软件开发、…

DIDCTF-应急响应

前言 最近在学长分享应急响应与电子取证的知识&#xff0c;又恰逢期末周没有课&#xff0c;记录自己在取证道路的成长。 linux-basic-command 下载附件&#xff0c;得到Apache 服务器访问日志文件&#xff0c;根据题目要求找出排名前五的ip&#xff0c;题目提示写脚本&#…

MybatisPlus深入学习

今天深入的学习了一下mp&#xff0c;从头开始学习&#xff01;哈哈哈哈哈 本节只讲干的&#xff01; 我们上来先看一段代码&#xff0c;不知道你能不能看明白&#xff01; package com.itheima.mp.mapper;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapp…

安卓9.0系统修改定制化____安卓9.0系统精简 了解系统app组件构成 系统app释义 常识篇 一

在安卓 9.0 系统的使用过程中,许多用户都希望能够对系统进行深度定制,让手机系统更加贴合个人需求。而系统精简作为定制化的重要一环,不仅能够释放手机存储空间,还能提升系统运行速度,优化资源分配。想要安全有效地对安卓 9.0 系统进行精简,深入了解系统 app 组件的构成是…

2.4 Windows Conan编译FFmpeg 4.4.1

Conan的安装与使用参考之前的文章&#xff1a;Conan简单使用 一、Conan编译ffmpeg 1.1 Conan的配置文件 创建配置文件&#xff1a;C:\Users\wujh\.conan2\profiles\vs2019 [settings] archx86_64 build_typeRelease compilermsvc compiler.cppstd14 compiler.runtimedynami…

社群经济视域下开源链动2+1模式与AI智能名片赋能S2B2C商城小程序的创新发展研究

摘要&#xff1a;在数字经济蓬勃发展的背景下&#xff0c;社群经济作为连接用户情感与价值反哺的新型经济形态&#xff0c;正通过技术创新与模式重构实现深度演化。本文基于社群经济“创造有价值连接”的本质特征&#xff0c;系统探讨“开源链动21模式”“AI智能名片”与“S2B2…

【计算机网络】——reactor模式高并发网络服务器设计

&#x1f525;个人主页&#x1f525;&#xff1a;孤寂大仙V &#x1f308;收录专栏&#x1f308;&#xff1a;计算机网络 &#x1f339;往期回顾&#x1f339;&#xff1a;【计算机网络】非阻塞IO——epoll 编程与ET模式详解——(easy)高并发网络服务器设计 &#x1f516;流水不…

Uniapp跨端兼容性全方位解决方案

在当今多端融合的移动互联网时代&#xff0c;Uniapp作为一款优秀的跨平台开发框架&#xff0c;已成为许多开发者的首选。然而&#xff0c;真正的挑战在于如何优雅地处理不同平台之间的差异。本文将全面剖析Uniapp跨端开发的兼容性处理方案&#xff0c;提供从基础到高级的完整解…

迅为RK3576开发板NPUrknn-toolkit2环境搭建和使用docker环境安装

开发板采用核心板底板结构&#xff0c;在我们的资料里提供了底板的原理图工程以及PCB工程&#xff0c;可以实现真正意义上的裁剪、定制属于自己的产品&#xff0c;满足更多应用场合。 迅为针对RK3576开发板整理出了相应的开发流程以及开发中需要用到的资料&#xff0c;并进行详…

什么是 OpenFeigin ?微服务中的具体使用方式

什么是Feign&#xff1f; Feign 是一种声明式的 HTTP 客户端框架&#xff0c;主要用于简化微服务架构中服务之间的远程调用&#xff0c;也可以通过定义接口和注解的方式调用远程服务&#xff0c;无需手动构建 HTTP 请求或解析响应数据。Spring Cloud 对 Feign 进行了增强&…

对抗性提示:进阶守护大语言模型

人工智能模型正快速进化 —— 变得更具帮助性、更流畅&#xff0c;并且更深入地融入我们的日常生活和商业运营中。但随着其能力的提升&#xff0c;风险也在增加。在维护安全可信的人工智能方面&#xff0c;最紧迫的挑战之一是对抗性提示&#xff1a;这是一种微妙且通常富有创意…

运营商频段

以下是三大运营商&#xff08;中国移动、中国电信、中国联通&#xff09;及中国广电的 5G 主要频段 及其所属运营商的整理表格&#xff1a; 运营商频段上行频率 (MHz)下行频率 (MHz)带宽备注广电n28703-733758-788230MHz移动共享n794900-4960-60MHz-移动n412515-2675-160MHz-n7…

项目拓展-Apache对象池,对象池思想结合ThreadLocal复用日志对象

优化日志对象创建以及日志对象复用 日志对象上下文实体类 traceId 请求到达时间戳 请求完成时间戳 请求总共耗费时长 get/post/put/delete请求方式 Http状态码 原始请求头中的所有键值对 请求体内容 响应体内容 失败Exception信息详细记录 是否命中缓存 package c…