Kendo 网格:如何在取消当前编辑后将焦点设置回网格单元格

Kendo Grid: How to set focus back to a grid cell after canceling current editing

我正在研究如何覆盖 Kendo 网格的一些默认键盘命令。正如在我的 example 中一样,我正在截取回车键,并希望按照以下代码块中的方式向下移动一个单元格..

if (e.keyCode == 13) { // enter
      var current = grid.current();
      var index = current.index();
      var next = $(current).closest('tr').next('tr');                    

      var td = next.find('td:eq(' + index + ')');
      grid.closeCell();
      grid.current(td);  
      current = grid.current();
      grid.focus(current);
      //current.focus();
      return;
    }

马上就要上班了。如果我在按下回车键之前处于导航模式,那么一切仍然正常。但是,如果我处于 edit 模式(例如,选择一个单元格,然后按回车键),它会进入一个单元格并返回导航模式,但我似乎没有有正确的重点。左右箭头键不起作用,向上和向下箭头似乎显示焦点在页面上,而不是在网格内。

我尝试过以各种方式调用焦点,但就是无法正常工作。知道我在这里做错了什么吗?任何帮助将不胜感激!

提前致谢

您需要将焦点设置在 table 本身,因为网格的 keydown 事件处理程序绑定到 table:

scope.$on("kendoRendered", function (e) {
    var grid = scope.grid;
    var elem = $(grid.table);

    // attach keydown handler to the table
    var newHandler = function (e) {
        if (e.keyCode == 13) { // enter
            var current = grid.current();
            var index = current.index();
            var next = $(current).closest('tr').next('tr');

            grid.closeCell();
            var td = next.find('td:eq(' + index + ')');

            grid.current(td);
            $(td).closest("table").focus();
        }
    };

    $(elem).on("keydown", newHandler);
});

(demo)