jQuery UI 1.10:对话框和 zIndex 选项

问题描述 投票:0回答:10

我必须创建一个对话框,以便在单击图像时出现。问题是我有一些非常大的 z 索引(例如 500),并且 ui 对话框位于该元素的背面。

这是页面,您需要登录,用户:“raducup”,密码:“1”。另一个问题是,当我单击对话框上的关闭时,该对象消失了。

这是我在单击图像时调用的函数:

function openItem(obiect){
    $( obiect ).css('zIndex',9999);
    $( obiect ).dialog({
        dialogClass: "no-close",
        modal: true,
        draggable: true,
        overlay: "background-color: red; opacity: 0.5",
        buttons: [
            {
                text: "OK",
                click: function() {
                    $( this ).dialog( "close" );
                }
            }
        ]
    });
    reparaZindex();
}
javascript jquery html css jquery-ui
10个回答
121
投票

你没有告诉它,但你正在使用 jQuery UI 1.10。

在 jQuery UI 1.10 中,删除了

zIndex
选项:

删除了 zIndex 选项

与 stack 选项类似,zIndex 选项对于 正确的堆叠实施。 z-index 在 CSS 中定义, 现在通过确保聚焦的对话框是最后一个来控制堆叠 在其父元素中“堆叠”元素。

你必须使用纯CSS来设置对话框“在顶部”:

.ui-dialog { z-index: 1000 !important ;}

您需要键

!important
来覆盖元素的默认样式;如果您只需要为对话框设置它,这会影响您的所有对话框,请使用
dialogClass
选项并设置其样式。

如果您需要模式对话框,请设置

modal: true
选项,请参阅 docs:

如果设置为 true,对话框将具有模态行为;上的其他项目 该页面将被禁用,即无法与之交互。莫代尔 对话框在对话框下方但在其他页面上方创建一个覆盖层 元素。

您需要设置具有更高 z-index 的模态叠加层才能这样做:

.ui-front { z-index: 1000 !important; }

对于这个元素也是如此。


11
投票

您可能想尝试 jQuery 对话框方法:

$( ".selector" ).dialog( "moveToTop" );

参考:http://api.jqueryui.com/dialog/#method-moveToTop


8
投票

添加你的CSS:

 .ui-dialog { z-index: 1000 !important ;}

5
投票

这里有多个建议,但据我所知,jQuery UI 人员目前已经破坏了对话控制。

我这么说是因为我的页面上包含了一个对话,它是半透明的,模态消隐 div 位于其他一些元素后面。这不可能是对的!

最后,根据其他一些帖子,我开发了这个全局解决方案,作为对话小部件的扩展。它对我有用,但我不确定如果我从对话中打开对话会做什么。

基本上,它会查找页面上其他所有内容的 zIndex,并将 .ui-widget-overlay 移至更高的位置,并将对话本身移至更高的位置。

$.widget("ui.dialog", $.ui.dialog,
{
    open: function ()
    {
        var $dialog = $(this.element[0]);

        var maxZ = 0;
        $('*').each(function ()
        {
            var thisZ = $(this).css('zIndex');
            thisZ = (thisZ === 'auto' ? (Number(maxZ) + 1) : thisZ);
            if (thisZ > maxZ) maxZ = thisZ;
        });

        $(".ui-widget-overlay").css("zIndex", (maxZ + 1));
        $dialog.parent().css("zIndex", (maxZ + 2));

        return this._super();
    }
});

感谢以下内容,因为这是我从中获取如何执行此操作的信息的地方: https://stackoverflow.com/a/20942857

http://learn.jquery.com/jquery-ui/widget-factory/extending-widgets/


0
投票

在调用对话框之前添加此内容

$( obiect ).css('zIndex',9999);

并删除

 zIndex: 700,

来自对话框


0
投票

moveToTop
才是正确的方法。

z-索引不正确。它一开始可以工作,但多个对话框将继续漂浮在您使用 z-index 更改的对话框下方。不好。


0
投票

要将我的元素夹在模式屏幕和对话框之间,我需要将我的元素提升到模式屏幕上方,然后将对话框提升到我的元素上方。

在元素

$dlg
上创建对话框后,我通过执行以下操作取得了小小的成功。

$dlg.closest('.ui-dialog').css('zIndex',adjustment);

由于每个对话框都有不同的起始

z-index
(它们逐渐变大),我将
adjustment
制作为带有提升值的字符串,如下所示:

const adjustment = "+=99";

但是,jQuery 只是不断增加模式屏幕上的

zIndex
值,因此到第二个对话框时,三明治不再起作用。 我放弃了 ui-dialog“模态”,将其设置为“假”,然后创建了自己的模态。 它完全模仿了 jQueryUI。 在这里:

CoverAll = {};
CoverAll.modalDiv = null;

CoverAll.modalCloak = function(zIndex) {
  var div = CoverAll.modalDiv;
  if(!CoverAll.modalDiv) {
    div = CoverAll.modalDiv = document.createElement('div');
    div.style.background = '#aaaaaa';
    div.style.opacity    = '0.3';
    div.style.position   = 'fixed';
    div.style.top        = '0';
    div.style.left       = '0';
    div.style.width      = '100%';
    div.style.height     = '100%';
  }
  if(!div.parentElement) {
    document.body.appendChild(div);
  }
  if(zIndex == null)
    zIndex = 100;
  div.style.zIndex  = zIndex;
  return div;
}

CoverAll.modalUncloak = function() {
  var div = CoverAll.modalDiv;
  if(div && div.parentElement) {
    document.body.removeChild(div);
  }
  return div;
}

0
投票

$(".ui-dialog").css("zIndex", 10000);


0
投票

首先使用 Javascript 设置初始 Z-index。将对话框置于页面顶部。

    var maxZI = Math.max.apply(null,$.map($(\'body *\'), function(el,index){ if ($(el).css(\'position\') != \'static\') return parseInt($(el).css(\'z-index\')) || 0; }));
    $(".ui-dialog").css("z-index",maxZI+1);

第二步在创建时使用 moveToTop 方法,使对话框位于另一个对话框的顶部 对话框。

    create: function(event, ui) { $( ".selector" ).dialog( "moveToTop" ); };

-1
投票

向对话框对象添加

zIndex
属性:

$(elm).dialog(
 zIndex: 10000
);
© www.soinside.com 2019 - 2024. All rights reserved.