如果对话框的父级具有固定位置,则jQuery模式对话框被overlay div隐藏

|| 我的jQuery对话框之一是在具有固定位置(页面的页脚)的div中定义的。当打开模态jQuery对话框时,jQuery创建一个覆盖整个页面的覆盖div,然后将要打开的对话框放在z-index值高于覆盖div的顶部。不幸的是,尽管要打开的模态对话框的z索引大于覆盖层本身,但在div中具有固定位置的任何对话框都将被覆盖div覆盖。 为了演示目的,我简化了以下HTML代码,以显示非固定位置div和固定位置div中的对话框之间的区别:
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
<html xmlns=\"http://www.w3.org/1999/xhtml\">

<head>
    <link type=\"text/css\" rel=\"stylesheet\" href=\"/demo-webapp/faces/javax.faces.resource/themes/sam/theme.css?ln=primefaces&amp;amp;v=2.2.1\" />
    <link type=\"text/css\" rel=\"stylesheet\" href=\"/demo-webapp/faces/javax.faces.resource/jquery/ui/jquery-ui.css?ln=primefaces&amp;v=2.2.1\" />
    <title>CSS TEST</title><script type=\"text/javascript\" src=\"/demo-webapp/faces/javax.faces.resource/jquery/jquery.js?ln=primefaces&amp;v=2.2.1\"></script><script type=\"text/javascript\" src=\"/demo-webapp/faces/javax.faces.resource/jquery/ui/jquery-ui.js?ln=primefaces&amp;v=2.2.1\"></script>

    <script>
    /*<![CDATA[*/
        jQuery(function() {
            jQuery(\"#dialog1\").dialog({
                autoOpen: false,
                modal: true
            });

            jQuery(\"#dialog2\").dialog({
                autoOpen: false,
                modal: true
            });
        });
    /*]]>*/
    </script>
</head>

<body>
    <div style=\"z-index: 1; position: static;\" onclick=\"jQuery(\'#dialog1\').dialog(\'open\')\">
        position: static; /* default */
        <div id=\"dialog1\" title=\"Dialog1\"></div>
    </div>

    <div style=\"z-index: 1; position: fixed; left: 100px; top: 100px\" onclick=\"jQuery(\'#dialog2\').dialog(\'open\')\">
        position: fixed;
        <div id=\"dialog2\" title=\"Dialog2\"></div>
    </div>
</body>

</html>
加载页面后,它看起来像这样: 正常div中的对话框显示正确 第一个对话框是使用非固定位置的div定义的,并且该对话框正常显示: 固定位置的div中的对话框已覆盖 请注意,当显示在固定位置的div中定义的第二个对话框时,用户无法单击它,因为它已被覆盖div覆盖: 请注意,在两种情况下,覆盖div的z-index均为1001,对话框的z-index为1002。因此,覆盖div不应覆盖对话框,但不幸的是,固定位置的对话框属于这种情况div。 由于我使用的是Primefaces,因此我必须绑定到jQuery 1.4.4。该问题出现在Firefox 4,最新版本和Safari,最新版本中。 您可以重新构建此问题,并且对此有解决方案吗?请注意,尽管它可以解决问题,但我不想将对话框放置在固定位置的div之外。这样做的原因是我正在使用JSF的模板机制,因此页面的页脚将动态填充内容-在这种情况下为弹出对话框。如果必须将对话框放置在其他位置,则会破坏模块化。     
已邀请:
我在这里得到了同样的东西,我只是简单地将位置设置为固定在叠加层上就可以了。
.ui-widget-overlay{
    position:fixed;
}
    
我想出了这个解决方案,当该解决方案包含在页面底部时,模板等会将每个对话框移动到body标签中。
<script>
    /* Bug fix that moves every dialog directly into the body tag since some jQueryUI dialogs are
       sometimes not placed above the overlay div due to their parent divs */
    $(document).ready(function() {
        var body = $(\"html body\")[0];
        $(\"div.ui-dialog\").each(function() {
            $(this).appendTo(body);
        });
    });
</script>
将此标头包含在标头中找不到
div.ui-dialog
标记,因为这些div gt动态地注入了
ui-dialog
类。因此,此错误修复程序必须在之后执行。     

要回复问题请先登录注册