作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 ag-grid 库在 Angular 应用程序中处理一个可编辑的表格。我想继续编辑单元格(在全行编辑模式下),直到我完成它,然后通过 API 手动关闭编辑器。问题是编辑器正在关闭其他单元格单击/焦点(在其他行上),如 here 所述:
The grid will stop editing when any of the following happen:
- Other Cell Focus: If focus in the grid goes to another cell, the editing will stop.
onCellMouseDown()
hook 没有帮助,因为
cellFocused
事件在
cellMouseDown
之前触发.因此,编辑在我有机会拦截
mousedown
之前停止。事件。
onRowEditingStopped()
中重新打开它。除非编辑器已通过“确定”按钮关闭。
最佳答案
毕竟,我已经设法提供了一个完全适合我也面临的这个问题的自定义解决方案。
首先是在当前正在编辑特定行时禁用指向未编辑行的指针事件。在 Ag-grid 的“cellEditingStarted”回调中,我添加了以下代码:
public cellEditingStarted(event: any): void {
//not all rows are on dom ag-grid takes care of it
const nonSelectedGridRows = document.querySelectorAll('.ag-grid-custom-row:not(.ag-row-selected):not(.ag-row-editing):not(.pointer-events-none)');
forEach(nonSelectedGridRows, row => {
row.classList.add("pointer-events-none");
});
}
因为在编辑特定单元格时,并非所有行都存在于 dom(Ag-grid 在滚动时创建和销毁),所以我还添加了一个 rowClassRule,它在创建行时应用:
this.rowClassRules = {
'pointer-events-none': params => {
if (params.api.getEditingCells().length > 0) {
return true;
}
return false;
}
};
scss:
.pointer-events-none {
pointer-events: none
}
通过禁用指针事件,当您单击未编辑的单元格时,该单元格将不会获得焦点,因此当前编辑的单元格仍将保持在编辑模式。您可以提供自己的自定义验证解决方案并通过 API 手动关闭编辑器。完成后,您必须再次启用指向所有网格行的指针事件:
private enablePointerEvents(): void {
//not all rows are on dom ag-grid takes care of it
const nonSelectedGridRows = document.querySelectorAll('.ag-grid-custom-row.pointer-events-none');
forEach(nonSelectedGridRows, row => {
row.classList.remove("pointer-events-none");
});
}
关于ag-grid - 如何防止在 "Other Cell Focus"上的 ag-grid 中关闭单元格编辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60916157/
我是一名优秀的程序员,十分优秀!