之前开发的时候,用的是angular4,用ngGrid的时候要求对表格中的按键进行监控,具体如下:
1)上下左右,按方向移动位置(指编辑单元格);
2)enter,移动到下一个可编辑单元格;
3)一个数字输入框(cellEditorFramework)里双击空格键完成某个特定操作;
那这其中遇到什么问题呢?
1)表格对上下左右键有默认的焦点移动事件,当你通过当前位置,键值,开始编辑方法(startEditingCell)来移动的时候,焦点会移动两次,处理方法为通过设置定时器清除默认的焦点移动,然后再执行自定义的移动事件
思考:当需处理的按键行为过多时,定时器处理会变得很麻烦,难以把握,有没有可以禁掉默认的焦点移动事件呢?或者其它的简洁的移动处理方法呢?
2)无法通过keydown、keyup、keypress某一种方法来监控所有的按键行为,暂时的处理方法是keypress处理enter,keyup处理上下左右,
思考:是否有方法可以监控所有的按键输入?
3)对于自定义的单元格编辑器,需要在编辑器内设置监控方法并实时将变更发送到表格层(onchange),
// 编辑器内的按键监控
constructor(
) {
super();
const that = this;
document.onkeydown = function (e) {
if (e.which === 32) {
that.value = that.value.trim();
that.params['onChange'](e, that.value);
}
};
document.onkeyup = function (e) {
if ((e.which === 37 || e.which === 38 || e.which === 39 || e.which === 40) && that.params['onChange']) {
that.value = that.value;
that.params['onChange'](e, that.value);
}
};
}