最近的项目使用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. JavaScript 的 API设计原则

    一.接口的流畅性 好的接口是流畅易懂的,他主要体现如下几个方面: 1.简单 操作某个元素的css属性,下面是原生的方法: document.querySelectorAll('#id').style. ...

  2. js 对象浅拷贝和深拷贝

    var model={name:"boy",age:13}; var CopyModel=model; console.log(CopyModel.name); model.nam ...

  3. 远程到Server系统安装和使用QTP

    转自http://www.51testing.com/html/40/307440-832446.html  感谢作者 多童鞋都问在2003上如何安装QTP,为何单机许可不能使用? 我在N太serve ...

  4. Tomcat负载均衡、调优核心应用进阶学习笔记(二):Tomcat前世今生、安装、配置文件详细说明、tomcat应用程序部署、webapp 体系结构、tomcat运行方式

    文章目录 Tomcat前世今生 安装 配置文件详细说明 tomcat应用程序部署 webapp 体系结构 tomcat运行方式 Tomcat前世今生 java体系: 1 java程序设计语言 2 ja ...

  5. python学习笔记:itsdangerous模块

    使用itsdangerous生成临时身份令牌 安装 pip install itsdangerous 使用 import itsdangerous salt='sdaf'#加盐 t=itsdanger ...

  6. 比较全面的CSS hack方式一览

    转载请注明来自CSDN freshlover的博客专栏<史上最全CSS Hack方式一览>   做前端多年,虽然不是经常需要hack,但是我们经常会遇到各浏览器表现不一致的情况.基于此,某 ...

  7. 【题解】sweet

    题目描述 为了防止糖果被小猫偷吃,John把他的糖果放在了很多的高台上,一个高台可以认为是一段平行于X轴的线段,并且高台的y坐标都是大于0的,每个高台都有左端点和高台的长度,每个高台都有糖果.所有的高 ...

  8. jsp 内置对象HTTP协议

    有些对象不用声明就能够在JSP页面的脚本部分使用,这就是JSP的内置对象. JSP的内置对象有:request .response.session.application.out. 下面我们将一一介绍 ...

  9. BUUCTF MISC部分题目wp

    MISC这里是平台上比较简单的misc,都放在一起,难一些的会单独写1,二维码图片里藏了一个压缩包,用binwalk -e分离,提示密码为4个数字,fcrackzip -b -c1 -l 4 -u 得 ...

  10. python之arrow时间处理模块

    首先安装 pip install arrow 直接创建arrow对象 print(arrow.get(2019, 1, 23)) # 2019-01-23T00:00:00+00:00 print(a ...