2011-12-04 72 views
1

我有一個網頁,最終是一堆jquery-ui對話框,所有30%的屏幕寬度,三列,每列包含儀表板信息不同的種類。需要解決.position()錯誤jquery-ui/webkit

我將數據加載到div中,並在$(document).ready()函數中創建對話框,並將它們排列在各列的頂部,具體取決於div的數據類型顯示。

我對每個div使用了這段代碼的一個變體(我計劃讓這個更清潔,當我得到它正確的工作,所以請原諒它的冗餘)。首先,我創建對話框如果它包含的數據:

//show recent posts if they exist below the account requests 
if($('#recentPosts').html().length > 0){ 
    $('#recentPosts') 
    .dialog({ 
     title: 'Recent Forum Messages', 
     height: 320 
    }) 
    .parent().addClass('cfdialog').attr('id', 'recentPostsDialog'); 
} else { 
    $('#recentPosts').addClass('cfdialog').attr('id', 'recentPostsDialog'); 
} 

...這是必要的,因爲我需要能夠抓住整個對話框(我不明白爲什麼有沒有一種機制來輕鬆地分配ID到對話框div);創建我的所有對話框後,我做這樣的事情:

//now that the dialogs are set up, position them. 
var leftContent = $('#columnTop'); 
var centerContent = $('#columnTop'); 
var rightContent = $('#columnTop'); 

$('.cfdialog') 
.css('width', '30%') 
.css('height', 'auto') 
.css('max-height', '400'); 

... 

$('#recentPostsDialog') 
.position({ 
    my: 'center top', 
    at: 'center bottom', 
    of: centerContent, 
    offset: '0 5' 
}); 
if ($('#recentPostsDialog').html().length > 0){ 
    centerContent = $('#recentPostsDialog'); 
} 

這將顯示在對話框中的職位,就像我在Firefox和IE瀏覽器一樣。但是,對於Chrome,對話框彈出約30個像素並干擾我的菜單項。

我已經閱讀了很多關於SO的文章,jQuery論壇建議這是由於webkit計算偏移量的方式,以及有人發佈了修補程序修補程序,但在這種情況下似乎不起作用。

有人能告訴我如何解決基於webkit的瀏覽器的問題嗎?

+0

你確定對話框是正確的解決方案? –

+0

說實話,不,我不認爲它是,但我也不認爲這是我的問題在這種情況下。 –

+0

它有點兒。你試圖將絕對定位的'div'(它將被附加在'body'的底部)超過一些其他元素。這甚至聽起來錯了,並且產生了我期望的那種問題。嘗試使用摺疊/關閉按鈕創建窗口小部件,然後對話框確實不是正確的路徑,你可能需要一些'可拖動的',但物理上位於列的內部 –

回答

0

這似乎沒有簡單的答案。我結束了測試jQuery.browser.safari,如果真的,手動抵消divs。 :(