Jquery ui jQueryUI选项卡内的jQueryUI对话框-有趣的定位

Jquery ui jQueryUI选项卡内的jQueryUI对话框-有趣的定位,jquery-ui,iframe,jquery-ui-dialog,jquery-ui-tabs,Jquery Ui,Iframe,Jquery Ui Dialog,Jquery Ui Tabs,我有一个使用jQueryUI选项卡的网页,其中一些选项卡具有侦听器,当数据被另一个进程更改时,这些侦听器接收回调,并提供用最新数据更新页面 值得指出的是,此选项卡的内容位于iframe中 我使用jQueryUI对话框弹出消息,但是如果用户当时打开了另一个选项卡,当他们返回该选项卡时,该对话框会被卡在页面的左上角: 如果在该选项卡打开时弹出对话框,则不会发生这种情况-它很好地居中,即使我离开该选项卡并稍后返回该选项卡,也会保持居中: 这显然与当时隐藏的选项卡有关,有人知道解决方案吗?当用户打开

我有一个使用jQueryUI选项卡的网页,其中一些选项卡具有侦听器,当数据被另一个进程更改时,这些侦听器接收回调,并提供用最新数据更新页面

值得指出的是,此选项卡的内容位于iframe中

我使用jQueryUI对话框弹出消息,但是如果用户当时打开了另一个选项卡,当他们返回该选项卡时,该对话框会被卡在页面的左上角:

如果在该选项卡打开时弹出对话框,则不会发生这种情况-它很好地居中,即使我离开该选项卡并稍后返回该选项卡,也会保持居中:

这显然与当时隐藏的选项卡有关,有人知道解决方案吗?当用户打开该选项卡时,也许我能够重新定位该对话框?或者,不管选项卡是否打开,都可以通过某种方式使其居中

以下是对话框的代码:

/*
show any message in a confirmation box and handle the response.
Close loading dialog if it's open otherwise
jQuery gets upset about the order of dialog creation and destruction
*/
function showConfirm(msg, confirmFunction, recordId) {
    parent.closeCustomPopup('loader');
    if(
        $j('#confirmInFrame').html(msg).dialog({
            fluid: true,
            width: 'auto',
            height: 'auto',
            modal: true,
            draggable: false,
            resizable: false,
            closeOnEscape: true,
            position: { my: "center center", at: "center center", of: window },
            buttons: {
                'OK': function() {
                    $j( this ).dialog( 'close' );
                    confirmFunction(recordId);
                },
                Cancel: function() {
                    $j( this ).dialog( 'close' );
                }
            }
        }).dialog( 'open' )
    ){
        confirmFunction;
    }
在父页面中,我尝试抓取打开的对话框并将其重新定位到中心位置,但我无法抓取它们(可能是因为它们位于iframe内),并收到“错误:无法在初始化之前调用对话框上的方法;尝试调用方法“选项”:


谢谢你的帮助

对话框位置的默认值为“中心”。我怀疑是其他东西通过CSS抛出了它。你可以在你的文章中也包含这些信息,或者创建一个JSFIDLE的例子来说明这个问题。当对话框打开时,当我在选项卡内时,它会显示在中间,只有当该选项卡不是焦点时才会显示。我认为这是因为当选项卡关闭时,jquery通过设置样式来隐藏选项卡(div)以显示:none,所以我认为当对话框在这个隐藏的div中弹出时,它没有任何中心。这只是一个假设,因为您没有包含未知的HTML。为什么不将
移出选项卡呢。或者在运行
showConfirm()
时创建
。div是选项卡,当您在另一个选项卡上时它是隐藏的,当您单击它的选项卡时它会显示出来。这是基于示例的标准jqueryui选项卡行为,而不是它的外观。请提供一个适当的例子。
$j('#tabs').tabs({
    activate: function(event ,ui){
        var activeDialogs = $j('iframe:visible').contents().find('.ui-dialog:visible');
        activeDialogs.each(function(i) {
            $j(this).dialog("option", "position", { my: "center center", at: "center center", of: window });
        });
    }
});