Я решил это, поэтому решил оставить ответ для всех, кто ищет.
По сути, моя проблема сводилась к вызову $ .modal.close (), когда я не должен был это делать.
Изначально, когда я хотел перезагрузить диалог, я вызвал $ .modal.close () и выполнил перезагрузку внутри обратного вызова onClose ().При вызове $ .modal.close () может показаться, что я удаляю обработчик события close и поэтому, когда я перезагружал диалоговое окно, вещи ломались.
Чтобы исправить проблему, я удалил запрос на перезагрузку из onClose () обратного вызова и просто обрабатывает все внутри обычной функции.Когда я использовал обратный вызов, я использовал возвращенный объект диалога для выполнения анимации.Благодаря этому новому подходу я могу достичь того же результата, нацелив вместо него $ ('# simplemodal-container').
TL; DR - приведенный ниже код позволяет загружать новые данные в открытый диалог через AJAX, а такжевозможность изменения размера и изменения положения диалогового окна.
Код для открытия диалогового окна:
function pop_dialog(url, width, height)
{
$('div.modal').modal(
{
minWidth: width,
minHeight: height,
onOpen: function(dialog)
{
//Animate the overlay
dialog.overlay.slideDown('slow', function ()
{
//Make sure the contents of the dialog are showing
dialog.data.show();
//Preload
$('.dialog-preloader').show();
$('div.modal img.logo').show();
//Fade in preloader display and perform AJAX request
dialog.container.fadeIn('fast', function()
{
data = ajax_page_load(url, false, false);
//On success, show dialog contents
if(data.statusText == 'OK')
{
$('div.modal div.container').html(data.responseText);
$('.dialog-preloader').hide();
}
});
});
},
onClose: function(dialog)
{
//Fade out the dialog
dialog.container.fadeOut('slow', function()
{
//If we're closing the dialog, animate the overlay off.
dialog.overlay.slideUp('slow', function()
{
//Clean up the mess.
$.modal.close();
});
});
}
});
}
Код для «перезагрузки» диалогового окна
function load_dialog(url, width, height)
{
//Hide the dialog
$('#simplemodal-container').fadeOut('slow', function()
{
//Hide the dialog contents and show preloader
$('div.modal div.container').hide()
$('.dialog-preloader').show();
//Set the new width
$('#simplemodal-container').width(width);
$('#simplemodal-container').height(height);
$.modal.setPosition();
//Fade container back in with preload message
$('#simplemodal-container').fadeIn('slow', function()
{
//Perform AJAX request to load new dialog
data = ajax_page_load(url, false, false);
//On success, show dialog contents
if(data.statusText == 'OK')
{
$('div.modal div.container').html(data.responseText);
$('.dialog-preloader').hide();
$('div.modal div.container').show();
}
});
});
}