Это то, что я придумал, так как это, очевидно, ошибка в модальном диалоге, я могу представить вам «взлом», который будет работать, но я думаю, что причина, по которой это происходит, заключается в том, что когда вы создать модальный диалог, он добавляет
<div class="ui-widget-overlay"></div>
над div диалогового окна, и поскольку вы добавляете все диалоговые окна непосредственно к телу, возникает путаница, какие из них нужно закрыть через некоторое время (это только мое предположение, чего я действительно не должен был делать) :)
Обходной путь - проверять количество диалогов и количество наложений каждый раз, когда вызывается CreateDIalog, и, если они не совпадают, вы вручную вставляете новое наложение, которое избавит вас от проблемы. Одна вещь, связанная с этим, заключается в том, что, поскольку это наложение было добавлено вручную, диалоговое окно не знает, что ему нужно его скрывать, поэтому, когда вы возвращаетесь только к одному диалоговому окну и закрываете его, наложение остается. Это также необходимо скрыть вручную.
Я знаю, что это не лучшее решение, но это обходной путь, и оно сработало для меня, поэтому я надеюсь, что вы можете использовать его, пока кто-нибудь не найдет лучшее решение.
вот код:
function createDialog(dialogId) {
$('#' + dialogId).dialog({
autoOpen: true,
modal: true,
buttons: {
'close': function() {
$(this).dialog('close');
},
'create': function() {
var newDialogId = dialogId + '1';
$('body').append('<div id="' + newDialogId + '">' + newDialogId + '</div>');
createDialog(newDialogId);
}
},
close: function() {
$(this).dialog('destroy');
$(this).remove();
resetOverlays();
}
});
var dialogs = $("div.ui-dialog");
var overlays = $("div.ui-widget-overlay");
var overlayStyle = $(overlays[0]).attr("style");
if(dialogs.length > overlays.length)
{
var overlay = $("<div></div>").addClass("ui-widget-overlay").attr("style", overlayStyle).css("z-index", "1001");
$("body").append(overlay);
}
}
function resetOverlays()
{
var dialogs = $("div.ui-dialog");
if(dialogs.length == 0)
{
$(".ui-widget-overlay").remove();
}
}
Я добавил проверку на наличие диалогов и наложений:
var dialogs = $("div.ui-dialog");
var overlays = $("div.ui-widget-overlay");
var overlayStyle = $(overlays[0]).attr("style");
if(dialogs.length > overlays.length)
{
var overlay = $("<div></div>").addClass("ui-widget-overlay").attr("style", overlayStyle).css("z-index", "1001");
$("body").append(overlay);
}
, который заботится о добавлении дополнительного наложения при необходимости, и я добавил функцию сброса наложения, когда она вам больше не нужна
function resetOverlays()
{
var dialogs = $("div.ui-dialog");
if(dialogs.length == 0)
{
$(".ui-widget-overlay").remove();
}
}
, который вызывается в закрытом разделе сценария диалога
,close: function() {
$(this).dialog('destroy');
$(this).remove();
resetOverlays();
}
У меня не было возможности тщательно его протестировать, но это может быть началом, если ничего больше ..
удачи