我必须创建一个对话框,以便在单击图像时出现。问题是我有一些非常大的 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();
}
你没有告诉它,但你正在使用 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; }
对于这个元素也是如此。
您可能想尝试 jQuery 对话框方法:
$( ".selector" ).dialog( "moveToTop" );
添加你的CSS:
.ui-dialog { z-index: 1000 !important ;}
这里有多个建议,但据我所知,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/
在调用对话框之前添加此内容
$( obiect ).css('zIndex',9999);
并删除
zIndex: 700,
来自对话框
moveToTop
才是正确的方法。
z-索引不正确。它一开始可以工作,但多个对话框将继续漂浮在您使用 z-index 更改的对话框下方。不好。
要将我的元素夹在模式屏幕和对话框之间,我需要将我的元素提升到模式屏幕上方,然后将对话框提升到我的元素上方。
在元素
$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;
}
$(".ui-dialog").css("zIndex", 10000);
首先使用 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" ); };
向对话框对象添加
zIndex
属性:
$(elm).dialog(
zIndex: 10000
);