Angular UI Grid将焦点设置为导航时的单元格

时间:2016-08-02 06:25:49

标签: javascript angularjs angular-ui-grid

我有一个可编辑的网格。其中两列是ItemCode和Quantity。当用户输入数量并按下向下键时,我希望下一行将焦点设置在下一行的ItemCode单元格上。我添加了这个事件监听器并将其转到单元格,但它会快速进入编辑模式,然后进入选定模式。如何确保单元格保持编辑模式?

CROSS APLLY

更新:这是我的columnDefs:

gridApi.cellNav.on.navigate($scope, function (newRowcol, oldRowCol) {
    $scope.$broadcast('uiGridEventEndCellEdit');

    if (oldRowCol != null && 
        oldRowCol.col.colDef.name == 'quantity' && 
        oldRowCol.row != newRowcol.row) {
        newRowcol.row.grid.api.cellNav
            .scrollToFocus(newRowcol.row.entity, 
                            newRowcol.row.grid.options.columnDefs[1]);
        }
    });

1 个答案:

答案 0 :(得分:1)

正如我上面评论的那样,我认为这是angular-ui-grid中的一个错误。我的解决方法如下......

问题是使用scrollToFocus()转到另一行,但是您的常规键盘操作(标签,向下箭头等)会将您带到enableCellEdit: true的列。因此,一种解决方法是使用scrollToFocus()设置要在其中呼叫enableCellEdit: false的列AFTER。

这很难看,但我创造了一个" spacer"每列可能有标签后的列。

{ name: 'itemCode', displayName: 'part #' },
{ name: 'quantity', displayName: 'qty' },
{ name: '_spacer1', displayName: '', width: '0%', minWidth: 1, maxWidth: 1, enableCellEdit: false },
{ name: 'someOtherColumn', displayName: 'something'},

所以,在我的情况下,我想从"数量"中找到一个标签。 to" someOtherColumn"如果row.entity.quantity的值为0(例如),那么我会将scrollToFocus()调用到下一行。因为标签的正常下一个单元格有enableCellEdit: false,所以它可以正常工作。

现在针对您的情况,我不确定它是否有帮助,因为您正在使用向下箭头按下,这意味着您不会使用正常的键盘操作更改列。但也许它会给你一个想法。 (此外,如果您的用户使用Tab而不是向下箭头,那么您可以使用变通方法,甚至可能根本不需要它,具体取决于您拥有的其他列。)

我认为更好的想法可能是重新打开我的错误(在上面的评论中链接),并说你也遇到了问题,看看你是否可以直接回答真正的修复应该是什么! (我很乐意看到它。)