2013-10-24 44 views
1

我彈出了自動化屬性。面板包含搜索,搜索按鈕,datatable和datascroller字段。在按下搜索按鈕或在datascroller中選擇頁面javascript被調用。 Javascript用於將瀏覽器可見區域的中心移動到彈出窗口。所有工作正常,除彈出陰影留在彈出已移動前面板位置。在RichFaces 4.x中移動彈出窗口後彈出陰影位置不正確

按鈕代碼:

<a4j:commandButton id="searchButton" 
    value="#{msg.search}" 
    action="#{chAction.searchSegments}" 
    styleClass="richButton" 
    render="clientCategoryCandidateTable" 
    oncomplete="centerPanel();" /> 

的Javascript:

function centerPanel() { 
    var modalPanel = #{rich:component('addToSegmentsPanel')}; 
    var windowWidth = document.documentElement.clientWidth; 
    var windowHeight = document.documentElement.clientHeight; 
    var popupWidth = modalPanel.width(); 
    var popupHeight = modalPanel.height(); 
    modalPanel.setLeft(Math.max(0, (windowWidth-popupWidth)/2)); 
    modalPanel.setTop(Math.max(0, (windowHeight-popupHeight)/2)); 
}; 

我嘗試了多種不同版本的JavaScript,但同樣的副作用:

function centerPopup() { 
    var popup = #{rich:component('addToSegmentsPanel')}; 
    popup.moveTo(Math.max(0, (window.innerWidth-popup.width())/2), 
       Math.max(0, (window.innerHeight-popup.height())/2)); 
}; 

屏幕截圖: Popup before call javascript Popup after call javascript

感謝您的任何幫助或意見。

回答

1

問題是固定在JavaScript中的末尾添加隱藏和顯示:

modalPanel.hide(); modalPanel.show(); 
0

我決定上調用調整彈出的()動作的問題。 你的情況應該是modalPanel.resize()

+0

您的回答部分正確。你的方法可以很好地處理陰影,但它不允許更改彈出窗口寬度。因爲數據表中的結果數據不是以1行(預期結果)顯示,而是以多行(名稱,類型,說明)顯示。我的版本不僅調整窗口大小,而且調整大小適當的數據。 –

+0

我試着用數據表中的多行。它適當調整大小。在數據表中,我沒有在列中添加樣式。 –

+0

我有相反的情況:彈出包含datatable與分頁,datatable沒有嚴格的列寬,在第一頁我有短名稱的行,在第二頁有些行有長名稱。在下一頁點擊'centerPanel'後,javascript被調用並且彈出窗口被重新居中。直到你的代碼工作。但我想在1行顯示所有數據(如果需要,調整數據表的大小)。這部分不包含您的代碼。數據顯示爲多行。也許它可以通過添加列寬或數據的無包裝樣式來解決。問題在5個月前解決了。感謝您的解決方案。 –