最近的项目使用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. 【Flutter学习】基本组件之上下刷新列表(一)

    一,概述 RefreshIndicator是Flutter基于Material设计语言内置的控件,集合了下拉手势.加载指示器和刷新操作一体,可玩性比FutureBuilder差了一大截,不过大家也用过 ...

  2. 64、通过PickListValuesUtil,Schema查看下拉列表中的值

    public class PickListValuesUtil { public static Map<String,Object> getPicklistValues(String sO ...

  3. 单机zookeeper部署伪集群

    1.zookeeper介绍 ZooKeeper 是一个为分布式应用所设计的分布的.开源的协调服务.分布式的应用可以建立在同步.配置管理.分组和命名等服务的更高级别的实现的基础之上. ZooKeeper ...

  4. springMvc注册时图形验证码完整代码与详细步骤``````后续更新注册时对密码进行加密

      第一使用 画图软件制作图片 ,文件名就是验证码    ------用户的实体类 import java.util.Date; public class Member {    private in ...

  5. [轉]Exploit The Linux Kernel NULL Pointer Dereference

    Exploit The Linux Kernel NULL Pointer Dereference Author: wztHome: http://hi.baidu.com/wzt85date: 20 ...

  6. vue - blog开发学习2

    首页博客列表的开发 1.修改index.vue,使能够支持列表功能 <template> <div> <PostList v-for="(item,index) ...

  7. 自定义input[type="radio"]

    对于表单,input[type="radio"] 的样式总是不那么友好,在不同的浏览器中表现不一. 对单选按钮自定义样式,我们以前一直用的脚本来实现,不过现在可以使用新的伪类 :c ...

  8. Spark使用Java读取mysql数据和保存数据到mysql

    原文引自:http://blog.csdn.net/fengzhimohan/article/details/78471952 项目应用需要利用Spark读取mysql数据进行数据分析,然后将分析结果 ...

  9. Linux下如何查看系统是多少位的

    在Linux命令行下输入  getconf LONG_BIT 命令

  10. 笔记63 Spring Boot快速入门(三)

    SpringBoot中使用JSP Springboot的默认视图支持是Thymeleaf,但是Thymeleaf还没开始学,熟悉的还是jsp,所以要让Springboot支持 jsp. 一.在pom. ...