2011-08-28 95 views
2

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

  1. 在复选框列中双击仍将焦点置于第一列。

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

如何解决这些问题?

+0

我更新了我的答案。 – Oleg

回答

3

the demothe answer。演示可以完全按照您的需要进行,或者您可以根据自己的目的修改演示。

修订:1)你想我原来的演示或试图使用所描述的想法代码?在我的环境中(在不同的计算机上)the demo将焦点放在单击的单元格中。它在IE9(原生甚至兼容模式下),IE8,Google Chrome 13,Safari 5.1,Opera 11.50,Firefox 3.6.20和Nightly 9.0a1(Firefox的下一个版本)中都能正常工作。

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

+0

谢谢。我尝试了你的演示,并发现两个问题。我更新了问题并描述了这些问题。另外在我的测试用例中按回车键将jqgrid保存到最左边的位置。如果你的测试用例水平偏移不变。也许这是由于保存到服务器造成的 – Andrus

+0

@安德鲁斯:我没有看到你的代码在测试用例中所需的更改。在'invokeEditRow'中,你仍然使用'$(“#grid”)。jqGrid('editRow',lastSelectedRow,true,null,null,...,'所以**没有'oneditfunc'被使用**应该设置焦点 – Oleg

+0

我尝试了你的演示,并双击复选框内联编辑开始,但焦点不是被复选框被点击,而是被第一个可编辑的列我正在寻找一种方法来消除不安全的水平滚动。大量的行被改变,这变成了annyoining。 – Andrus

相关问题