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

时间:2015-03-03 09:28:48

标签: jquery kendo-ui kendo-grid

我正在研究如何覆盖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;
    }

非常接近工作。如果我在输入之前处于导航模式,那么一切仍然正常。但是,如果我处于编辑模式(例如,选项卡到单元格,然后按回车键),它确实会进入单元格并返回导航模式,但是我似乎没有正确的焦点。左箭头键不起作用,向上箭头似乎显示焦点在页面上,而不在网格内。

我试过以各种方式调用焦点,但我无法让它发挥作用。我在这里做错了什么想法?任何帮助将不胜感激!

提前致谢

1 个答案:

答案 0 :(得分:3)

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

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