2011-04-19 48 views
7

我目前使用jgGrid與navGrid,del設置爲true。問題是當用戶點擊刪除時,它彈出網格左上角的確認框。由於我們已經滾動到底部,我有一個很大的高度,用戶必須一直到頂部確認。有什麼辦法可以改變這個位置嗎?手動偏移很好,但理想情況下,我想將它停靠在左下方,如左上方所示。jqGrid重新定位刪除確認框

在此先感謝

(如果這是欺騙我很抱歉。我嘗試了發佈,但它給了我一些奇怪的錯誤,在我的歷史沒有顯示這樣假定它沒有張貼。)

回答

9

我覺得不是一個騙局。在相反的情況下,我覺得很好,所以+1。

jqGrid內部使用方法viewModal$.jgrid.viewModal),它顯示最多的對話框。該方法有toTop參數,但delGridRoweditGridRow不會使用它,它將設置爲toTop:true。因此,添加,編輯和刪除對話框將始終顯示在網格的頂部,該網格可位於可調區域內。

要解決這個問題,你可以定義改變對話框位置的事件句柄afterShowForm。例如

$("#list").jqGrid('navGrid','#pager', {}, {}, {}, 
        { 
         afterShowForm: function($form) { 
          var dialog = $form.closest('div.ui-jqdialog'), 
           selRowId = myGrid.jqGrid('getGridParam', 'selrow'), 
           selRowCoordinates = $('#'+selRowId).offset(); 
          dialog.offset(selRowCoordinates); 
         } 
        }); 

在示例中,對話將被放置在所選的行上。當最後一行中的選定行和對話框的底部位於窗口之外時,可以改進代碼。不過,上面的實現看起來比默認的更好,因爲用戶在他想要刪除的行上正好看到對話框,並且他可以移動對話框以便它完全可見。

您可以在the live demo上測試刪除對話框的建議移動。

+0

我還沒有將其添加到我的編碼中,但通過演示它似乎是我需要的。非常感謝! – 2011-04-19 18:03:08

+0

該演示似乎不再適用。該表格仍然彈出到最上面。我錯過了什麼嗎? – devXen 2014-05-23 16:50:41

+0

@Chensformers:你用來測試哪個網頁瀏覽器?嘗試再次複製您的測試:1)打開演示; 2)選擇靠近網格底部的一行,以便您可以看到導航欄(例如,選擇行號290)3)單擊「刪除」按鈕4)確認顯示「刪除」對話框**所選行**(在行號290下)。如果沒有在我的答案中使用'afterShowForm',那麼刪除對話框將顯示在網格的頂部,而不是在選定的行下。 – Oleg 2014-05-23 19:48:27

7

找到了更好的here

在你的JavaScript庫補充一點:

jQuery.fn.center = function() { 
    this.css("position","absolute"); 
    this.css("top", ($(window).height() - this.height())/2+$(window).scrollTop() + "px"); 
    this.css("left", ($(window).width() - this.width())/2+$(window).scrollLeft() + "px"); 
    return this; 
} 

現在你只需要在afterShowForm屬性補充一點:

afterShowForm: function(form) { 
    form.closest('div.ui-jqdialog').center(); 
} 

form.closest( 'div.ui-jqdialog')= >允許你獲得模態彈出窗口,如果是editForm或deleteForm,則無需精確。

此代碼將彈出窗口放置在屏幕中央,因此如果您的網格非常大,則不必滾動。