Дизайн диалогового окна JQuery UI таков, что для работы ему необходим существующий контент. Обычно в примерах это DIV
, взятый из существующего BODY
DOM.
Существуют случаи, когда добавление разметки к существующим страницам просто для создания диалога, особенно если содержимое загружается AJAX, вызывает проблемы. Например, у вас может быть библиотека JavaScript, которую можно вызывать с нескольких страниц, и вы не хотите добавлять разметку к каждой из них.
Альтернативный способ ( вдохновленный этим ) находится здесь:
Разница в том, что вы создаете DIV программно (будет автоматически добавлен в DOM) - а когда диалоговое окно закрывается, мы полностью его уничтожаем - и удаляем из DOM при событии 'close'.
function JQDialog(title, contentUrl, params) {
var dialog1 = $("<div>").dialog(
{
autoOpen: false,
modal: true,
title: title,
close: function (e, ui) { $(this).remove(); },
buttons: { "Ok": function () { $(this).dialog("close"); } }
});
dialog1.load(contentUrl).dialog('open');
}
Замените dialog1.load(contentUrl).dialog('open');
на следующее, если вы не хотите, чтобы диалоговое окно открывалось (и потенциально могло мерцать), пока содержимое не загружено. Это также позволит правильно центрировать его без дополнительной работы.
dialog1.load(contentUrl, function () {
$(this).dialog('open');
});