【问题标题】:JQGrid - Trying to bind the "new in v4.3.2" events without successJQGrid - 尝试绑定“v4.3.2 中的新”事件但没有成功
【发布时间】:2014-12-09 01:08:16
【问题描述】:

我正在尝试绑定 jqGrid 文档中报告为“v4.3.2 中的新”的一些事件,特别是“jqGridKeyEnter”或“jqGridKeySpace”(http://www.trirand.com/jqgridwiki/doku.php?id=wiki:events)。

我需要做的是使用“cellEdit:true”在网格中不可编辑的选定单元格上捕获“空格”键。当我使用光标键移动时选择了单元格,但不会触发空格或输入键。没有关于这些新事件的文档,我做错了吗?

我尝试在选项中设置标准事件,比如:

{
    ...
    jqGridKeySpace: function() { alert('jqGridKeySpace'); }
}

也尝试过(如文档示例):

$('#mygrid').on('jqGridKeySpace', function (e, rowid, orgClickEvent) {
    alert('jqGridKeySpace');
});     

但是没有触发事件。我也尝试过其他新活动,但没有成功。

编辑:我使用的是 4.6.0 版本

【问题讨论】:

    标签: javascript jquery jqgrid


    【解决方案1】:

    在我看来,jqGridKeySpace 的用法存在误解。它与onSpace 回调的作用相同,它仅在使用bindKeys 方法的情况下起作用。此外,它不能与单元格编辑一起使用。

    在单元格编辑的情况下,jqGrid 在第一次调用cellEdit 时创建小 div。参见单元格编辑模块的the linethe linethe line。因此,如果您需要捕捉按下 Space 键,您应该执行类似的操作

    var $grid = $('#mygrid'),
        myNavKeyDown = function (e) {
            var p = $grid.jqGrid("getGridParam");
            if (e.which === 32) { // space key
                $("#mylog").remove();
                $("<p id='mylog'>space key pressed on the cell in the row with<br/>" +
                    "the row index: " + p.iRow + "<br/>" +
                    "the column index: " + p.iCol + "<br/>" +
                    "the rowid: " + $grid[0].rows[p.iRow].id + "<br/>" +
                    "the column name: " + p.colModel[p.iCol].name + "</p>").appendTo("body");
                return false;
            }
        };
    $grid.on("jqGridSelectCell", function () {
        var knv = $grid.jqGrid("getGridParam", "knv");
        if (knv) {
            $("#" + $.jgrid.jqID(knv))
                .off('keypress', myNavKeyDown) // remove old handle if exist
                .on('keypress', myNavKeyDown);
        }
    });
    

    我为您创建了the demo,它演示了代码。如果您单击“客户端”或“注释”列(在演示中不可编辑)的任何单元格,则该单元格将被选中。按 Space 键将处理事件处理程序并显示有关网格下方单击的单元格的信息。结果如下图所示

    【讨论】:

    • 您好,奥列格,感谢您的帮助。为了更好地解释,我添加了一条评论作为单独的答案。
    【解决方案2】:

    感谢您的宝贵帮助。我尝试了您的解决方案,效果很好。但我一直在调查并找到了一个更简单的解决方案(或解决方法)。

    首先,这正是我想要做的:

    每一行都充当一个单选按钮组。通过单击它们,单元格被绘制(使用“onCellSelect”)。但我没有办法通过键盘来完成,因为当单元格不可“编辑”时,大多数事件都不会引发。

    因此,我将单元格更改为“可编辑”并将它们设置为自定义编辑。作为“可编辑”,单元格自动捕获“输入”键,进入编辑模式。但我的“custom_element”函数返回一个不可编辑的元素,如 .因此,我可以使用任何引发的事件,即“beforeEditCell”来完成我的工作,绘制单元格并通过 ajax 将状态保存到服务器。 如果单元格被鼠标单击,同样的事件也可以工作(不需要像“onCellSelect”这样的第二个事件)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-19
      • 1970-01-01
      • 1970-01-01
      • 2017-12-13
      相关资源
      最近更新 更多