el-table点击单元格变成输入框,以及其自动获取焦点失效可能的原因(focus失效)

news2024/11/24 13:59:14

1.el-table点击单元格变成输入框

这里主要使用了el-table三个自带的方法/属性:

<el-table
    :data="MesTableData"
    border
    @cell-click="clickCell"
    :row-class-name="tableRowClassName"
    :cell-class-name="tableCellClassName"
>

clickCell:单元格的点击事件,用于根据当前点击的行列信息决定变成输入框的cell。

row-class-name与cell-class-name用于获取每个单元格的行列信息以便定位cell。

// 把每行的索引放进row中
tableRowClassName({ row, rowIndex }) {
    row.index = rowIndex;
},
// 把每列的索引放进column中
tableCellClassName({ column, columnIndex }) {
    column.index = columnIndex;
},

这样,在点击的时候就可以获取到相关信息了:

clickCell(row, column){
    // 获取行列Index并存在一个数组中
    this.activeCellIndex = [row.index, column.index];
    // 使其获取焦点
    this.$nextTick(() => {
        this.$refs['tab'+row.index+column.index].focus()
    })
},

(表格处部分代码展示,根据activeCellIndex判断是否展示el-input框)

<el-table-column prop="value1" label="变量1">
    <template slot-scope="scope">
        <el-input :ref="'tab'+scope.row.index+scope.column.index" 
            v-if="scope.row.index === activeCellIndex[0] 
                && scope.column.index === activeCellIndex[1]" 
            v-model="scope.row.value1"></el-input>
        <div v-else>{{scope.row.value1}}</div>
     </template>
</el-table-column>

<el-table-column prop="value2" label="变量2">
    <template slot-scope="scope">
        <el-input :ref="'tab'+scope.row.index+scope.column.index" 
            v-if="scope.row.index === activeCellIndex[0] 
                && scope.column.index === activeCellIndex[1]" 
            v-model="scope.row.value2"></el-input>
        <div v-else>{{scope.row.value2}}</div>
     </template>
</el-table-column>

即可实现效果:

 2.获取焦点失效可能原因:

可能1:需在定时器或nextTick中获取ref并focus()。

可能2:有时提高ref获取焦点时可以打印出ref对应DOM,但是focus却不生效。

后来笔者通过document.querySelectorAll方法发现获取到的该类名的Dom不止一个。经过排查是el-table的一列设置了fixed(固定)所导致的。设置它会自动生成一列并不显示,造成focus失效的假象。

解决方法:获取第一个符合条件的Dom并获取其焦点。(是这个思路,解决方法不唯一)

以下是笔者的解决方案:

1.先为el-input定义类名,方便获取:

<el-table-column label="变量1">
    <template slot-scope="scope">
        <el-input 
            :class="'tab'+scope.row.index+scope.column.index"                                 
            :ref="'tab'+scope.row.index+scope.column.index" 
            v-if="scope.row.index == activeCellIndex[0] && scope.column.index == activeCellIndex[1]" 
            v-model="scope.row.value1">
        </el-input>
    </template>
</el-table-column>

2.获取真正的input并获取其焦点(方法不一,这里使用的jQuery) 

clickCell(row, column){
    this.activeCellIndex = [row.index, column.index];
    this.$nextTick(() => {
        let aimDom = (document.querySelectorAll('.'+'tab'+row.index+column.index));
        // 此处打印aimDom发现有两个dom,组成一个数组。

        // this.$refs['tab'+row.index+column.index].focus();    //失效的原方法

        // 获取第一个符合条件的目标Dom,并获取焦点(笔者这里用的jQuery实现)
        // 因为el-input中的input标签是包裹在其中的,所以获取其children并focus()。
        $('.'+'tab'+row.index+column.index).children()[0].focus();
     })
},

效果实现!

希望本文会对你有所帮助~ ^_^

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

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

相关文章

解决elementUI弹出框关闭后再打开el-select下拉框无法选中的问题

文章目录 一、问题描述&#xff1a;二、问题解决 一、问题描述&#xff1a; 使用的前端UI框架为elementUI。 el-select组件在一个弹框中&#xff0c;打开该弹框&#xff0c;el-select可以正常选中&#xff0c;但是保存弹框中的表单信息关闭弹框后&#xff0c;再打开弹框&…

RT-DETR论文解读与代码

1.概述 目前以大名鼎鼎的YOLO为代表的基于CNN的实时监测网络需要NMS进行后处理&#xff0c;导致不能很好的优化网络&#xff0c;并且网络不够健壮&#xff0c;从而导致检测器的推理速度出现延迟。研究者也分析了Anchor-based和Anchor-free的YOLO的性能&#xff0c;发现Anchor并…

【Java基础篇】方法的使用(方法的重载和递归)

作者简介&#xff1a; 辭七七&#xff0c;目前大一&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a;Java.SE&#xff0c;本专栏主要讲解运算符&#xff0c;程序逻辑控制&#xff0c;方法的使用&…

打造智能生活方式

2个互联网工具与你分享 分享一&#xff1a; 随记单词是一款功能强大的单词记忆和管理应用程序。它为用户提供了便捷的学习工具和智能化的记忆方式&#xff0c;帮助用户轻松有效地记忆和掌握单词。 随记单词的特点之一是个性化记忆计划。用户可以根据自己的学习进度和需求&am…

如何使用MATLAB处理涡度通量数据

MATLAB MATLAB是美国MathWorks公司出品的商业数学软件&#xff0c;用于数据分析、无线通信、深度学习、图像处理与计算机视觉、信号处理、量化金融与风险管理、机器人&#xff0c;控制系统等领域。 MATLAB是matrix&laboratory两个词的组合&#xff0c;意为矩阵工厂&#x…

苹果头显Vision Pro深度解读3 苹果头显visonOS开发指南

1 程序员visonOS开发指南 作为iOS开发者&#xff0c;切换到visionOS开发非常简单啊&#xff0c;过去的一些技术基本上都用得上。目前根据苹果WWDC官方的文档&#xff0c;视频&#xff0c;我们可以知道: 开发语言&#xff0c;使用的是swift object-c c c等&#xff0c;swif…

简化日志数据管理:利用 Elastic 灵活路由的力量

作者&#xff1a;Felix Barnsteiner&#xff0c;Nicolas Ruflin 在 Elasticsearch 8.8 中&#xff0c;我们在技术预览中引入了重新路由处理器&#xff08;reroute processor&#xff09;&#xff0c;它可以根据灵活的路由规则将文档&#xff08;例如日志&#xff09;发送到不同…

Jmeter吞吐量控制器使用小结

吞吐量控制器(Throughput Controller)场景: 在同一个线程组里, 有10个并发, 7个做A业务, 3个做B业务,要模拟这种场景,可以通过吞吐量模拟器来实现.。 添加吞吐量控制器 如果你想学习jmeter性能测试&#xff0c;我这边给你推荐一套视频&#xff0c;这个视频可以说是B站播放全网…

第十六届全国大学生信息安全竞赛CISCN---Cypto

1.Sign_in_passwd 打开环境&#xff0c;下载附件&#xff0c;用记事本打开flag的文件 发现里面是像base密码但又不像base密码的一串&#xff0c;第二行的%&#xff0c;就很像url密码啊&#xff0c;之前做题没接触过啊&#xff0c;还是做题做少了 没有啥解题思路&#xff0c;看…

基于Jeecg-boot的flowable流程支持拒绝同意流程操作

更多功能看演示系统 gitee源代码地址 后端代码&#xff1a; https://gitee.com/nbacheng/nbcio-boot 前端代码&#xff1a;https://gitee.com/nbacheng/nbcio-vue.git 在线演示&#xff08;包括H5&#xff09; &#xff1a; http://122.227.135.243:9888 因为看很多朋友需要…

利用Transformer BEV解决自动驾驶Corner Case的技术原理

摘要&#xff1a; 本文总结了Transformer和BEV技术在自动驾驶中的原理和应用&#xff0c;特别是如何解决Corner Case问题。 自动驾驶系统在实际应用中需要面对各种复杂的场景&#xff0c;尤其是Corner Case&#xff08;极端情况&#xff09;对自动驾驶的感知和决策能力提出了更…

访问者模式(十八)

相信自己&#xff0c;请一定要相信自己 上一章简单介绍了命令模式(十七), 如果没有看过, 请观看上一章 一. 访问者模式 引用 菜鸟教程里面访问者模式介绍: https://www.runoob.com/design-pattern/visitor-pattern.html 在访问者模式&#xff08;Visitor Pattern&#xff09…

大模型入门(六)—— RLHF微调大模型

一、RLHF微调三阶段 参考&#xff1a;https://huggingface.co/blog/rlhf 1&#xff09;使用监督数据微调语言模型&#xff0c;和fine-tuning一致。 2&#xff09;训练奖励模型     奖励模型是输入一个文本序列&#xff0c;模型给出符合人类偏好的奖励数值&#xff0c;这个奖…

大数据技术——用户与组管理

一、实验目的 1.了解linux用户和组 2.熟练掌握liunx用户和组的基本操作 3.进一步了解linux系统 二、实验内容 1.用户账号的添加、删除与修改。 2.用户口令的管理 3.用户组的管理 三、实验原理或流程 Linux系统是一个多用户多任务的分时操作系统&#xff0c;任何一个要使…

阿里面试了7轮...就这么狠的吗?

引言 今年的大环境非常差&#xff0c;互联网企业裁员的现象比往年更严重了&#xff0c;可今年刚好是我的第一个“五年计划”截止的时间点&#xff0c;说什么也不能够耽搁了&#xff0c;所以早早准备的跳槽也在疫情好转之后开始进行了。但是&#xff0c;不得不说&#xff0c;这…

ApacheStreamPark2.1.0部署及执行flink-cdc任务同步mysql表的数据到es的实践

文章目录 [toc] 1.ApacheStreamPark是什么&#xff1f;2.介绍2.1 特性2.2 架构2.3 Zeppelin和StreamPark的对比 3.相关连接4.部署4.1 二进制包编译构建4.2 镜像构建4.3 初始化sql4.4 部署4.4.1 Docker-compose.yaml部署脚本4.4.2 配置文件准备4.4.3 flink启动配置4.4.4 streamp…

7. WebGPU 将图像导入纹理

我们在上一篇文章中介绍了有关使用纹理的一些基础知识。在本文中&#xff0c;我们将介绍从图像导入纹理。 在上一篇文章中&#xff0c;通过调用 device.createTexture 创建了一个纹理&#xff0c;然后通过调用 device.queue.writeTexture 将数据放入纹理中。 device.queue 上还…

从小白到大神之路之学习运维第41天---第三阶段---Redis高可用集群(redis 的主从复制、redis的哨兵模式操作)

第三阶段基础 时 间&#xff1a;2023年6月15日 参加人&#xff1a;全班人员 内 容&#xff1a; Redis高可用集群 目录 一、redis主从复制原理介绍 主从复制特点&#xff1a; 主从复制实现原理&#xff1a; 二、主从复制实现操作&#xff08;多机实例实现&#xff09…

Mysql 表的七种联接方式【附带练习sql】

联接 七种JOIN介绍 图形联接方式说明SQL内联接共有部分SELECT <select_list> FROM TableA A INNER JOIN TableB B ON A.Key B.Key;左联接A表独有共有部分SELECT <select_list> FROM TableA A LEFT JOIN TableB B ON A.Key B.Key;右联接B表独有共有部分SELECT &…

linux spi相关调试

在Linux系统中&#xff0c;SPI 的用户模式设备接口的驱动源码位于 drivers/spi/spidev.c&#xff0c;在应用层生成 /dev/spidev* 的节点&#xff0c;可以通过 read、 write 达到与硬件设备的 SPI 通信。下面介绍spidev驱动移植和应用程序编写方法。 SPI &#xff08;serial pe…