2011-07-21 70 views
4

我想定位一個jqgrid的視圖形式到屏幕的中心。由於高度是自動設置的(取決於數據量),因此我需要在渲染後計算其中心位置。因此我想使用afterShowForm。不幸,這不是所謂的。我嘗試了舊版本的jqGrid(也許最新的版本包含一個bug),但它並沒有解決我的問題。任何人都知道爲什麼它不開火?請注意,當我更改'beforeShowForm'中的'afterShowForm'時,它會被解僱。但那麼高度還沒有計算。謝謝! (當然,歡迎您提出另一種方式來實現我的目標!)。代碼:jqgrid afterShowForm沒有被調用

 $("#grid").jqGrid("navGrid", "#pager", 
     { view: true, addfunc: additem, editfunc: edititem, delfunc: deleteitem }, 
     {}, 
     {}, 
     {}, 
     {}, 
     { width: 350, 
      afterShowForm: function (formid) { 
       alert('yey'); 
       // Here I want to center the form 
      } 
     } 
     ); 

編輯:在維基上我發現View表單沒有afterShowForm事件;它只有OnClose中和beforeShowForm :(所以我想這是不可能的設置位置爲中心,這樣..

+0

閱讀本http://stackoverflow.com/questions/1234461/jqgrid-default-add-edit-buttons-processing-server-response – 2014-07-29 12:28:46

回答

2

問題的原因很簡單:在afterShowForm真的沒有視圖形式存在只有樹事件的支持:OnClose中,beforeShowFormbeforeInitData所以,你應該用beforeShowForm,但你需要另一個線程裏面是什麼:

beforeShowForm: function($form) { 
    setTimeout(function() { 
     // do here all what you need (like alert('yey');) 
    },50); 
} 

在大多數情況下,你可以使用(而不是50),甚至0作爲JavaScript函數的第二個參數setTimeout

+0

是啊..我想這是最好的解決爲止;)讓我們只是希望在不久的將來有一個afterShowForm實現。謝謝! – user825887

+0

@ user825887:不客氣!您可以在[trirand forum](http://www.trirand.com/blog/?page_id=393)中放置相應的變更請求。 – Oleg

0

好的,我解決了這個問題。我正在使用第二個setTimeout(),否則當窗口從舊位置移動到屏幕中心時會出現「閃爍」。謝謝!

var viewform = "#viewmodgrid"; 

     function centerViewForm() { 
      $(viewform).css('visibility', 'hidden'); 
      setTimeout(function() { 
       $(viewform).css('left', ($(document).width()/2) - ($(viewform).width()/2)); 
       $(viewform).css('top', ($(document).height()/2) - ($(viewform).height()/2)); 
       $(viewform).css('visibility', 'visible'); 
      }); 
     } 

...     beforeShowForm: function (formid) { 
        centerViewForm(); 
       }