【问题标题】:How to scroll with jqGrid cell editing on editrow call?如何在editrow调用时滚动jqGrid单元格编辑?
【发布时间】:2012-05-25 03:51:12
【问题描述】:

我已将 jqGrid 设置为使用单元格编辑,并绑定了一些导航键。

向上和向下箭头将调用上一行或下一行的编辑行,效果很好。唯一的问题是,如果我到达可见记录的末尾,它不会滚动以跟上。

我尝试在网格选项中设置scrollrows: true,但这似乎只适用于选择整行,而不是单元格。

以前有人处理过这个吗?我对滚动和 javascript/jquery 不是很有经验,所以我没有现成的解决方案。

感谢您的任何建议!

编辑:Here is a fiddle 帮助调试。要查看问题,请单击“Thingy”列,使用向下箭头导航。

【问题讨论】:

  • 我建议添加一些代码来演示您的问题,无论是在这里还是在线某个地方,例如 jsBin 或 jsFiddle。
  • @SamTyson 我已经更新了一些可以使用的代码。

标签: javascript jquery jqgrid scroll


【解决方案1】:

editNewCell 函数可以修改为使用setSelection 以确保新编辑的行可见:

function editNewCell(iRow, iCol) {
    e.preventDefault();
    e.stopPropagation();
    e.stopImmediatePropagation();
    grid.editCell(iRow, iCol, true);

    var selRow = grid.getGridParam('selrow');
    grid.jqGrid('setSelection', selRow );
};

如果您想尝试一下,这里有一个 jsfiddle 的更改。

【讨论】:

  • 我觉得不错。在我的实际网格上,它稍微减慢了行之间的移动,但绝对可用。谢谢!
  • @IronicMuffin - 不客气。不急,但如果您对此答案感到满意,请考虑奖励您的赏金:)
  • @justcurious - 您更新的小提琴没有解决请求的问题:I just want the grid to scroll when I reach the bottom of the visible records, so don't have to take my hands off the keyboard and scroll with the mouse
  • 关于解决问题的正确方法。另外,贾斯汀,我计划将赏金奖励给你,但前 5 个小时我不能。现在应该都设置好了。感谢您的帮助!
【解决方案2】:

我不确定我做对了。 “如果我到达可见记录的末尾,它不会滚动以跟上。”是什么意思?你的意思是一旦你到达顶行/底行你就不能再往前走了OR你的意思是如果你继续水平滚动并且一旦你越过最后一行您的编辑模式消失的可见记录数。

我有类似的excel like gridedit implementation,在编辑模式下我有向上和向下箭头导航以进行单元格编辑。第一段中的链接将带您到jsfiddle sample。在 javascript 部分中查找 HandleInputNavigation 函数。我已将列的 editoptions 下 colModel 中的 keydown 事件绑定到 HandleInputNavigation 函数。那是我处理向上/向下导航的地方。

5/24 更新:您的代码应如下所示:

    if (iRow && iCol) {
    var isShift = window.event.shiftKey ? true : false;
    var top = 1; //UPDATED
    var bottom = grid.getGridParam('reccount');
    var left = 0;
    var right = grid.getGridParam("colNames").length - 1;

    switch (key) {

    case 38:
            // up
        if (iRow === top) saveCell(iRow, iCol); //UPDATED
        else editNewCell(iRow - 1, iCol);
        break;

    case 40:
            // down
        if (iRow === bottom) saveCell(iRow, iCol); //UPDATED
        else editNewCell(iRow + 1, iCol);
        break;
    ...
    ...

UPDATED FIDDLE

【讨论】:

  • 我是说如果我一直按向下箭头,并且我在下方的可滚动(溢出)空间中有记录,它将继续激活它们的编辑模式,但网格不会滚动以使其可见。明白了吗?我只想在到达可见记录的底部时滚动网格,因此不必将手从键盘上移开并用鼠标滚动。
  • @IronicMuffin:你看过我上面贴的jsfiddle sample 吗?只需将 jqgrid 高度从“100%”更改为“100”即可模拟您的场景。您会看到垂直滚动效果很好。在 ClientAmountTaxTotal 列上试试。它们是可编辑的。必须双击单元格才能将它们置于编辑模式...这是自定义修改。
  • 是的,我看了一下,发现它有效,但我没有看到您在 HandleInputNavigation 中调整滚动的位置。
  • @IronicMuffin:我已将高度设置为“150”,因此您无需更改示例中的任何内容。
  • @IronicMuffin:你不应该做任何事情来将行带入可视区域。您的自定义代码一定会干扰 jqgrid 的自然流程。除非您发布代码,否则很难为您提供解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-19
  • 1970-01-01
  • 2011-03-18
  • 2017-12-23
  • 1970-01-01
相关资源
最近更新 更多