【问题标题】:how to focus next cell in kendo grid by enter如何通过输入聚焦剑道网格中的下一个单元格
【发布时间】:2014-07-27 14:42:42
【问题描述】:

我想在 Kendo Grid 中按回车键来选择下一个单元格。 我正在使用以下脚本:

 function onDataBound(e) {
        $("#batchgrid").on("focus", "td", function (e) {

            var rowIndex = $(this).parent().index();
            var cellIndex = $(this).index();
            $("input").on("keydown", function (event) {
                if (event.keyCode == 13) {
                    $("#batchgrid")
                    .data("kendoGrid")
                    .editCell($(".k-grid-content")
                    .find("table").find("tbody")
                    .find("tr:eq(" + rowIndex + ")")
                    .find("td:eq(" + cellIndex + ")")
                    .next()
                    .focusin($("#batchgrid")
                    .data("kendoGrid")
                    .closeCell($(".k-grid-content")
                    .find("table")
                    .find("tbody")
                    .find("tr:eq(" + rowIndex + ")")
                    .find("td:eq(" + cellIndex + ")")
                    .parent())));
                    return false;
                }
            });
        });
    }

这是我的jsfiddle。这段代码的问题是,当我按 Enter 键时,它将专注于下一个单元格,但之前的更改不会保留在屏幕上(最后一个单元格会以某种方式丢失更改)。 我知道这段代码有一个错误,我不知道错误在哪里。

【问题讨论】:

标签: jquery kendo-grid


【解决方案1】:

实际上不需要使用数据绑定函数,而是可以使用简单明了的 keydown 或 keypress jQuery 函数。

看看下面的代码:-

<script>

$(document).ready(function(){

$("#batchgrid").keypress(function(e){

var keyCode = e.keyCode || e.which;
                if (keyCode == 13) {
                    var grid = $("#batchgrid").data("kendoGrid");
                    var curCell = grid.find(".k-edit-cell");
                    grid.editCell(curCell.next()); // To move the cursor to the next cell and put the cell in edit mode
                    grid.select(curCell.next()); // To select the next cell
                    grid.focus(curCell.next()); // To set focus on to next cell   
                    e.preventDefault(); // To prevent the default behavior of the enter key press
                }
});

});

</script>

【讨论】:

  • var curCell = grid.find(".k-edit-cell");是无效的。相反,它应该是 var curCell = $("#batchGrid").find(".k-edit-cell")
  • @Booster- 下面两行代码:- var grid = $("#batchgrid").data("kendoGrid"); var curCell = grid.find(".k-edit-cell");相当于您在评论中提到的 $("#batchGrid").find(".k-edit-cell")。这并不意味着我在回答中提到的方法无效,不,它不是无效的,只是你的代码更优化了。
  • @Shivam657 不正确。 var curCell = grid.find(".k-edit-cell");抛出一个异常,表明该对象不支持“find”方法。我在 grid.focus 线上遇到了类似的异常。我将提交对此效果的修改。
  • 在评论之后,当我试图将注意力集中在新对象上时,在实际的剑道网格上实现此功能时实际上遇到了问题。毕竟我不会提交编辑,因为我不能 100% 确定我的更改是否适用于所有人。
【解决方案2】:

看看这个JS FIDDLE link

我已将数据绑定事件修改如下。

     $("#list").on("focus", "td", function (e) {         
     $("input").on("keydown", function (event) {
         if (event.keyCode == 13) {
             setTimeout(function () {
                 var curCell = $("#list").find(".k-state-selected")
                 var eCell = $("#list").find(".k-edit-cell")

                 curCell.removeClass("k-state-selected");
                 curCell.removeClass("k-state-focused");
                 curCell.removeAttr("data-role");
                 curCell.next().addClass("k-state-selected");
                 curCell.next().addClass("k-state-focused");
                 try {                         $('#list').data('kendoGrid').closeCell(eCell);
                 } catch (ex) {
                 }
                 $('#list').data('kendoGrid').select();                     
                 $('#list').data('kendoGrid').editCell(curCell.next());

             }, 50);

         }
     });
 });
 }

【讨论】:

【解决方案3】:

如果您在 keydown 事件中注释掉 .data("kendogrid") 调用,您可以使用 tab 导航并使用 enter 编辑/关闭。您似乎正在重置焦点和模糊数据。

【讨论】:

  • 我这样做了,但是当我在评论两个 .data("kendogrid") 后按回车键时,它不会专注于下一个单元格。你有什么可行的例子吗?
  • 为什么要 Enter 这样做?这就是标签的用途!
  • 这就是客户想要的。老实说,客户是对的,作为一名会计师,如果您想移动手腕,每天敲击 10000 次按键会使工作变得很累。猜猜 Telerik 需要考虑简单的键盘设计。
  • 1 个回车键或 1 个制表键.. 仍然按一个键.. 如果您想回车切换到下一个输入字段,请说服所有浏览器供应商更改该行为。该属性称为tabindex,也许您可​​以让他们制作一个enterindex属性?
【解决方案4】:

这段代码对我有用

$("#grid").on("focus", "td", function (e) {         
    $("input").on("keydown", function (event) {
        if (event.keyCode == 13) {
            setTimeout(function () {
                var grid = $("#grid").data("kendoGrid");
                var curCell  = $("#grid").find(".k-edit-cell");

                grid.editCell(curCell.next()); 

            });

        }
    });
});

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2013-07-02
    • 2014-05-07
    • 1970-01-01
    • 2014-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多