ag-grid 实现单元格内多个输入框键盘切换焦点
Posted 名字不好起啊
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ag-grid 实现单元格内多个输入框键盘切换焦点相关的知识,希望对你有一定的参考价值。
接了个需求,需要键盘支持单元格内的多个输入框切换焦点。
说实话,刚开始看觉得挺麻烦的,毕竟涉及到底层按键监听,看了遍代码,发现按键实现是 ag-grid 自带的,一下子省了好多事,但又有了新的问题,ag-grid 的键盘的只能切换单元格,不会进到单元格的内部去。
方向键、tab、shift+tab ,皆是如此。
没什么办法,只能找官网,cellKeydown、cellKeypress 什么的,都没用,最后看到了一个可以单元格禁止键盘事件的回调:
这个方法可以通过 return true 或者 false,来选择禁用 或 启用 单元格的键盘事件。
有了这个东西,思维一下子活跃了,本身 tab 键 就可以切换 input 框的焦点,于是乎只要在按 tab键的时候,校验下是不是单元格内输入框的边界再决定是否启用单元格的键盘事件。
尝试下:先标记输入框的边界,不然不好判断什么时候可以启用 tab,
为了方便,我直接加了 title,这样事件进来获取元素父层元素的 title 就比较好判断当前焦点是不是边界输入框了。
键盘事件回调加几个判断:
为了看的清楚,没优化用 || 。这样就实现了 tab 键到last ,直接会换到下一个单元格去,完美!
shift+tab 也是如此,不过这个方法一次只能监听一个键盘事件,就只能增加键盘事件来监听 shift 了。还是该方法,再加上 shift 的状态记录。
同时全局监听 keyup,更新 shift 抬起的状态。
这样 shift + tab 到 title=first 的 input 时,就能切换到前一个单元格去了!
方向键切换 input框太麻烦了,得每个 input 都做标记,底层还需要记录 input 的顺序,input 监听键盘事件,再根据标记去找前一个或后一个 input,再设置 focus。。。太麻烦的先不搞了~
以上是关于ag-grid 实现单元格内多个输入框键盘切换焦点的主要内容,如果未能解决你的问题,请参考以下文章
按下按钮和文本字段切换后 UITextField 失去焦点(键盘保持可见)
C# winform中咋实现当文本框获得焦点时,如何切换到中文输入法或英文输入法啊?