最近的项目使用ag-grid在Angular中处理表格,收到个需求是要能够同时修改大量的数据,按下Enter键的时候,光标得自动跳到下一行的对应列上。

方法一:用ag-grid自带的 enterMovesDown和 enterMovesDownAfterEdit 属性设置,具体操作参见https://www.ag-grid.com/javascript-grid-cell-editing/#enter-key-down。

但是比较遗憾的是,我用这两个参数进行设置的时候,居然没起作用。

方法二:只能自己弄了。

step1、使用ag-grid的cellrenderer定义了一个input的cellrenderer的组件AggridCellrenderer,组件内的html如下:

<!--AggridCellrenderer-->
<input id="echartsInput_{{index}}" [ngClass]="{'warning':warning == true}" type="text"
class="form-control margin-top-8px" [(ngModel)]="value" (keypress)="turnToNext($event)"
(blur)="changeGridData($event)"/>

在组件的input上面定义鼠标按下的事件,当keyCode等于13时,触发事件。

不过这里遇到了问题,就是在组件AggridCellrenderer内部使用

this._elementRef.nativeElement.querySelectorAll("#echartsInput_" + index);

来获取页面上的元素时,this指向的是AggridCellrenderer,所以只能取到当前组件内渲染出的input,并不能取到表格内其他的input。

step2、所以后面在AggridCellrenderer中引用了一个

//AggridCellrenderer
private context: EditHisCurveAggridComponent;

用来指向外层的表格所在组件的页面组件EditHisCurveAggridComponent,在EditHisCurveAggridComponent中定义了

//EditHisCurveAggridComponent
public turnToNext(param) {
if (param >= this.gridData.length) {
return false;
} else {
this._elementRef.nativeElement.querySelectorAll("#echartsInput_" + param)[0].focus();
document.getElementById("echartsInput_" + param).focus();
}
}

AggridCellrenderer中定义

turnToNext(event) {
let keyCode = event.keyCode;
if (keyCode === 13) {
event.preventDefault();
let next = this.index + 1;
this.context.turnToNext(next); //此处引用EditHisCurveAggridComponent中的turnToNext()方法
} }

OK,效果实现了。

------------------------

不过这里其实还有个很奇怪的地方,就是EditHisCurveAggridComponent中的turnToNext()方法里面,使用了两处获取焦点的操作,

this._elementRef.nativeElement.querySelectorAll("#echartsInput_" + param)[0].focus();
document.getElementById("echartsInput_" + param).focus();

我一开始只使用其中一种,但是发现不论只保留哪一种,都无法起作用。最后就保留了这两句。感觉还是应该是兼容性或者什么其他的问题。

项目是基于Angular4开发的。

在ag-grid表格上实现类似Excel中的按下enter键自动跳转到下一行对应的输入框功能,Angular4开发的更多相关文章

  1. 老板让我从上千个Excel中筛选数据,利用Python分分钟解决!

    大家好,又到了Python办公自动化系列. 今天分享一个真实的办公自动化需求,大家一定要仔细阅读需求说明,在理解需求之后即可体会Python的强大! 很多人学习python,不知道从何学起.很多人学习 ...

  2. JS将页面中表格,导出到Excel中(IE中)

    原文地址:http://blog.csdn.net/sinat_15114467/article/details/51098522 var idTmr; function getExplorer() ...

  3. Spring整合Struts2框架的第一种方式(Action由Struts2框架来创建)。在我的上一篇博文中介绍的通过web工厂的方式获取servcie的方法因为太麻烦,所以开发的时候不会使用。

    1. spring整合struts的基本操作见我的上一篇博文:https://www.cnblogs.com/wyhluckdog/p/10140588.html,这里面将spring与struts2 ...

  4. html table表格导出excel的方法 html5 table导出Excel HTML用JS导出Excel的五种方法 html中table导出Excel 前端开发 将table内容导出到excel HTML table导出到Excel中的解决办法 js实现table导出Excel,保留table样式

    先上代码   <script type="text/javascript" language="javascript">   var idTmr; ...

  5. [ExtJS5学习笔记]第三十三节 sencha extjs 5 grid表格导出excel

    使用extjs肯定少不了使用表格控件,用到表格,领导们(一般)还是惯于使用excel看数据,所以用到extjs表格的技术猿们肯定也会有导出表格excel这一个需求,本文主要针对如何在用extjs将gr ...

  6. 如何在web中实现类似excel的表格控件

    Execl功能非常强大,内置的很多函数或公式可以大大提高对数据的加工处理能力.那么在web中有没有类似的控件呢?经过一番搜寻,发现handsontable具备了基本的excel功能支持公式,同时能对数 ...

  7. 【图解】Web前端实现类似Excel的电子表格

    本文将通过图解的方式,使用纯前端表格控件 SpreadJS 来一步一步实现在线的电子表格产品(例如可构建Office 365 Excel产品.Google的在线SpreadSheet). 工具简介: ...

  8. js插件---在线类似excel生成图表插件解决方案

    js插件---在线类似excel生成图表插件解决方案 一.总结 一句话总结:google比百度好用多了,多用google google js editable table jquery 双向绑定 这种 ...

  9. SpreadJS:一款高度类似Excel的开发工具,功能涵盖Excel的 95% 以上

    Excel 作为一款深受用户喜爱的电子表格工具,借助其直观的界面.出色的计算性能.数据分析和图表,已经成为数据统计领域不可或缺的软件之一. 基于Excel对数据处理与分析的卓越表现,把Excel的功能 ...

随机推荐

  1. redis-持久化、主从复制、集群

    持久化 RDB.AOF(redis.conf) 主从复制 redis.conf 集群 redis-trib.rb.ruby相见如下链接http://www.cnblogs.com/wuxl360/p/ ...

  2. 【LeetCode 33】搜索旋转排序数组

    题目链接 [题解] 会发现旋转之后,假设旋转点是i 则0..i-1是递增有序的.然后i..len-1也是递增有序的. 且nums[i..len-1]<nums[0]. 而nums[1..i-1] ...

  3. ubuntu下共享wifi 使用kde5-nm-connection-editor

    1.首先按照正常的建立方法把wifi建立好,然后在软件中心搜索 network ,点击安装 kde5-nm-connection-editor. 2.在终端里输入kde5-nm-connection- ...

  4. AcWing 234. 放弃测试 (01分数规划)打卡

    题目:https://www.acwing.com/problem/content/236/ 题意:给你一个方程,可以有k个不选,要求最优 思路:看了一下这个方程就知道是01分数规划的模板题,它可以选 ...

  5. 继续我们的学习。这次鸟哥讲的是LVM。。。磁盘管理 最后链接文章没有看

    LVM...让我理解就是一个将好多分区磁盘帮到一起的玩意,类似于烙大饼...然后再切 新建了一个虚拟机,然后又挂了一个5G的硬盘,然后分出了5块空间,挂载到了虚拟机上.这些步骤很简单 fdisk    ...

  6. iOS 完全复制UIView

    如果要完全复制一个UIView和对象的时候可以使用对象序列化方法 // Duplicate UIView - (UIView*)duplicate:(UIView*)view { NSData * t ...

  7. SpringMVC·form表单Date类型问题导致的400问题

    问题描述 前端传yyyy-MM-dd hh:mm:ss格式的时间其实是String类型导致JavaBean中的Date类型Setter报错,从而导致api请求400. 问题解决 我的解决方式: 在对应 ...

  8. Newline required at end of file but not found

    在启动vue项目中遇到 解决方法 在main.js文件的最后一行加一个空行就可以了

  9. python学习笔记:通配符之glob模块(过滤)

    glob模块用来查找文件目录和文件,可以和常用的find功能进行类比.glob支持*?[]这三种通配符.返回的数据类型是list.常见的两个方法有glob.glob()和glob.iglob(),ig ...

  10. CF1168C

    CF1168C 从后往前扫一遍维护\(f[x][k]\)表示从开始x至少要走到那个位置才能到达一个第\(k\)位是1的数 #include<iostream> #include<cs ...