如何将焦点设置为在jqgrid中单击以开始内联编辑的单元格

如何将焦点设置为在jqgrid中单击以开始内联编辑的单元格,jqgrid,Jqgrid,在jqgrid中,内联编辑是通过双击单元格开始的。 光标定位到第一个可编辑列。 需要第二次单击才能将光标放置到单击的单元格 如何将光标放在单击以开始内联编辑的单元格上? 在单元格编辑模式下,单击的单元格正确接收焦点 function beginInlineEdit(rowID, afterSave) { var grid2 = $("#grid"); if (rowID && rowID !== lastSelectedRow) { var scr

在jqgrid中,内联编辑是通过双击单元格开始的。 光标定位到第一个可编辑列。 需要第二次单击才能将光标放置到单击的单元格

如何将光标放在单击以开始内联编辑的单元格上? 在单元格编辑模式下,单击的单元格正确接收焦点

function beginInlineEdit(rowID, afterSave) {
    var grid2 = $("#grid");
    if (rowID && rowID !== lastSelectedRow) {
        var scrollPosition = $("#grid").closest(".ui-jqgrid-bdiv").scrollLeft();
        cancelEditing($("#grid"));
        lastSelectedRow = rowID;
        setTimeout(function () {
            grid2.closest(".ui-jqgrid-bdiv").scrollLeft(scrollPosition);
        }, 100);
    }
    $("tr#" + lastSelectedRow + " div.ui-inline-edit, " + "tr#" + lastSelectedRow + " div.ui-inline-del").hide();
    $("tr#" + lastSelectedRow + " div.ui-inline-save, " + "tr#" + lastSelectedRow + " div.ui-inline-cancel").show();

    $("#grid").jqGrid('editRow', lastSelectedRow, true, null, null, null,
                 { _dokdata: FormData },
                 afterSave,
                 errorfunc,
                 function () {
                     cancelEditing($("#grid"));
                     setFocusToGrid();
                 }
             );
}
更新1

我尝试了IE9中的Oleg演示。问题:

  • 双击复选框列仍会将焦点放在第一列

  • 我减小了浏览窗口的宽度并向右滚动。在righmost列中单击会导致奇怪的快速闪烁:网格滚动到最左边的位置,然后返回到右边的位置

  • 如何解决这些问题?

    请从中查看。演示可以完全满足您的需要,也可以根据您的目的修改演示

    更新了:1)您是尝试了我的原始演示,还是尝试了在代码中使用所描述的想法?在我的环境中(在不同的计算机上),将焦点放在单击的单元格中。它在IE9(本机甚至兼容模式)、IE8、Google Chrome 13、Safari 5.1、Opera 11.50、Firefox 3.6.20和Nightly 9.0a1(Firefox的下一个版本)中正常工作

    2) 首先在第一个编辑位置滚动网格,然后滚动到单击的单元格是正确的行为。默认情况下,jqGrid内联编辑将焦点设置在第一个编辑单元格上,然后在的
    oneditfunc
    回调函数中,将焦点更改为单击的单元格。

    我的工作解决方案:

    onSelectRow: function(rowid,status,e){
                        if(rowid && rowid!==lastSel){ 
                            jQuery('#table_salary').restoreRow(lastSel); 
                            lastSel=rowid; 
                        }
                        jQuery('#table_salary').editRow(rowid, true);
                        $("input, select",e.target).focus();
                    },
    
    注意:

    • 需要声明变量lastSel
    • 表\u工资-更改表名

    谢谢。我尝试了你的演示,发现了两个问题。我更新了问题并描述了这些问题。此外,在我的测试用例中,按enter键将滚动jqgrid保存到最左边的位置。如果您的测试用例水平偏移量没有改变。也许这是因为把钱存到server@Andrus:我没有看到您的测试用例代码中需要的更改。在
    invokeEditRow
    中,仍然使用
    $(“#grid”).jqGrid('editRow',lastSelectedRow,true,null,null,
    。因此没有使用应设置焦点的
    oneditfunc
    。我尝试了演示并双击了复选框。内联编辑开始,但焦点不是放在单击的复选框上,而是放在第一个可编辑列上。我正在寻找一种方法来删除不必要的水平滚动。如果更改了大量行,这将成为注释。@安德鲁斯:在某些浏览器中(例如在Google Chrome中)光标将被放置在输入元素的末尾。将插入符号移动到单击点可能会像上面所描述的那样。我想这一切都不会那么容易。@Andrus:您可以尝试使用
    onCellSelect
    来完成此操作,或者在选择行之前在
    ondblClickR中以内联模式输入ow
    。所有事件都有
    e
    参数,该参数表示对象,该对象包含有关单击鼠标的确切位置的信息。因此,一般来说,您将拥有所有需要的信息。