2011-12-04 44 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。 :(