【问题标题】:Kendo Grid: How to set focus back to a grid cell after canceling current editingKendo Grid:取消当前编辑后如何将焦点设置回网格单元格
【发布时间】:2015-03-03 09:28:47
【问题描述】:

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

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

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

提前致谢

【问题讨论】:

    标签: jquery kendo-ui kendo-grid


    【解决方案1】:

    您需要将焦点设置在表格本身,因为网格的 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)

    【讨论】:

    • 我只是尝试了这个的小扩展,我认为会是一样的 - 我也想用箭头键来做这个(我假设与输入的一样),但由于某种原因combo 首先处理键,因此在我们进入新单元格之前,combo 值会发生变化 这里 (jsfiddle.net/peterjc/p6womgL9/2) 我已经处理了向下箭头(也将做向上箭头)。有没有办法阻止箭头键发生这种情况(我想知道为什么它们与输入不同)。干杯
    • 您必须禁用小部件的键盘导航; jsfiddle.net/p6womgL9/4
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-10
    • 2014-03-18
    • 1970-01-01
    • 2020-07-09
    • 1970-01-01
    相关资源
    最近更新 更多