2011-08-28 92 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

相關問題