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

时间:2011-08-28 07:28:09

标签: jqgrid

在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 demo。的问题:

  1. 双击复选框列仍然会将焦点放在第一列。

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

  3. 如何解决这些问题?

2 个答案:

答案 0 :(得分:3)

the demo查看the answer。演示可以完全满足您的需要,也可以根据您的需要修改演示。

更新:1)您是否尝试过我的原始演示,或者您尝试在代码中使用所描述的创意?在我的环境中(在不同的计算机上)the demo将焦点放在单击的单元格中。它在IE9(原生,甚至兼容模式),IE8,谷歌Chrome 13,Safari 5.1,Opera 11.50,Firefox 3.6.20和Nightly 9.0a1(下一版Firefox)中都是正确的。

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

答案 1 :(得分:0)

我的工作解决方案:

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
  • table_salary -更改为您的表名