我正在研究如何覆盖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;
}
非常接近工作。如果我在输入之前处于导航模式,那么一切仍然正常。但是,如果我处于编辑模式(例如,选项卡到单元格,然后按回车键),它确实会进入单元格并返回导航模式,但是我似乎没有正确的焦点。左箭头键不起作用,向上箭头似乎显示焦点在页面上,而不在网格内。
我试过以各种方式调用焦点,但我无法让它发挥作用。我在这里做错了什么想法?任何帮助将不胜感激!
提前致谢
答案 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)