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

news/2024/11/19 8:25:58/

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.ppmy.cn/news/404542.html

相关文章

React基础教程(二):React的基本使用

React基础教程(二)&#xff1a;React的基本使用 1、HelloReact 1.1 引入react基础依赖包 注意点&#xff1a;①必须要在②之前引入 <!-- 引入react核心库--><script src"../js/react.development.js"></script><!-- 引入react-dom&…

给你一棵二叉树的根节点 root,翻转这棵二叉树,并返回其根节点

public class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(){}TreeNode(int val){this.val val;}public TreeNode(int val, TreeNode left, TreeNode right) {this.val val;this.left left;this.right right;} } /* 递归的进行翻转 保存原来的右子树*/ publi…

OCR识别系列之一-----场景文字识别

另一种方法应用比较广的就是深度学习方法&#xff0c;深度学习方法是将OCR识别划分为文字检测和文本识别部分 &#xff0c;这也是深度学习技术可以充分发挥功效的地方。使用比较广泛的网络结构是Differentiable Binarization CRNN。 Differentiable Binarization简称DB&#…

EasyDL OCR文字识别

这个功能还是挺吊的&#xff0c;应用场景也不少。 定制识别图片中的文字信息&#xff0c;结构化输出关键字段内容&#xff0c;极大提升OCR模型训练效率&#xff0c;满 足个性化卡证票据识别需求&#xff1b;支持公有云服务、私有化部署多种使用方式。 说白了就是一个图片里有…

利用OCR识别图像中的英文和文字

一、Tesseract—OCR简介 将图片翻译成文字一般称为光学文字识别&#xff08;Optical Character Recognition,OCR&#xff09;。可以实现OCR的底层并不多&#xff0c;目前很多库都是实用共同的几个底层OCR库&#xff0c;或者是在上面进行定制。 Tesseract是一个OCR库&#xff0…

超轻量级中文ocr,OcrLiteOnnx文字识别

原项目地址&#xff1a;https://github.com/benjaminwan/OcrLiteOnnx 本文是基于原项目编译好后的OcrLiteOnnx文字识别系统&#xff0c;可以实现提取图片中的文字及文字中心点坐标等功能。 相较于Tesseract这个OCR来说文字识别的准确度要高很多&#xff0c;识别速度也会快&…

c++初始化vector的几种方法

在C中&#xff0c;vector是一种动态数组&#xff0c;可以在运行时自由添加、删除元素。初始化vector是创建一个vector对象并为其分配内存空间的过程。以下是C中初始化vector的几种方法&#xff1a; 默认构造函数 使用默认构造函数创建一个空的vector&#xff0c;如下所示&…

OCR文字识别软件哪个好?7大文字识别软件

由于从各种文档中提取文本的需求非常普遍&#xff0c;许多办公软件或公司都提供了OCR工具。在本文中&#xff0c;我们为您推出了一系列功能强大且易于使用的最佳 OCR 软件。 什么是 OCR 软件&#xff1f; OCR 软件是一种程序或工具&#xff0c;可以使用光学字符识别技术识别数…