Позиция диалогового окна jQuery по центру по вертикали с динамическим содержимым высоты

Я использую диалоговое окно jQuery, содержимое которого имеет переменный размер. Я динамически заполняю содержимое с помощью метода create. Когда диалоговое окно отображается, верхний левый угол диалогового окна располагается в центре экрана, но, поскольку диалоговое окно довольно высокое, его нижняя часть выходит далеко за пределы страницы. Я бы хотел, чтобы он был идеально центрирован независимо от размера диалогового окна. Вот jQuery:

var dialogOptions = {
    title: "",
    modal: true,
    width: 'auto',
    autoOpen: false,
    create: function () {
        $(this).load("/Management/RenderPartialCreateSubject");
    }
};

$("#dialog-message").dialog(dialogOptions);
$("#dialog-message").dialog("open");

Единственное, что я могу понять, это то, что содержимое не загружается до позиционирования диалогового окна. Есть ли способ заставить его загружать контент заранее?

Я также попытался загрузить частичное представление прямо в div, а затем открыть диалоговое окно следующим образом:

$.get("/Management/RenderPartialCreateSubject", null, function (data) {
    $("#dialog-message").html(data);
});
//open add new subject dialog
var dialogOptions = {
    title: "",
    modal: true,
    width: 'auto',
    autoOpen: false
};

$("#dialog-message").dialog(dialogOptions);
$("#dialog-message").dialog("open");

Который в первый раз рендерит неправильно, но работает во второй раз (после загрузки контента).


person Tevis    schedule 05.01.2015    source источник
comment
Попробуйте добавить $("#dialog-message").hide().delay(500).show(); после второго примера или попробуйте добавить .dialog("close").dialog("open") в конец $("#dialog-message").dialog("open");. Боюсь, я стараюсь избегать диалогов, поэтому не даю обещаний.   -  person Christopher Esbrandt    schedule 06.01.2015


Ответы (1)


Я подожду, чтобы узнать, есть ли у кого-то лучший ответ, но я смог решить эту проблему, заменив $.get на $.ajax и установив async: false, что позволяет загружать содержимое перед отображением диалогового окна.

person Tevis    schedule 05.01.2015