Bardziej wyczerpującą odpowiedź, która wykorzystuje odpowiedź Nicka w bardziej elastyczny sposób, można znaleźć tutaj .
Poniżej znajduje się adaptacja odpowiedniego kodu z tego wątku. To rozszerzenie zasadniczo tworzy nowe ustawienie okna dialogowego o nazwie autoReposition, które akceptuje wartość true lub false. Kod w postaci zapisanej domyślnie przyjmuje wartość true. Umieść to w pliku .js w swoim projekcie, aby Twoje strony mogły to wykorzystać.
$.ui.dialog.prototype.options.autoReposition = true;
$(window).resize(function () {
$(".ui-dialog-content:visible").each(function () {
if ($(this).dialog('option', 'autoReposition')) {
$(this).dialog('option', 'position', $(this).dialog('option', 'position'));
}
});
});
Umożliwia to podanie wartości „prawda” lub „fałsz” dla tego nowego ustawienia podczas tworzenia okna dialogowego na stronie.
$(function() {
$('#divModalDialog').dialog({
autoOpen: false,
modal: true,
draggable: false,
resizable: false,
width: 435,
height: 200,
dialogClass: "loadingDialog",
autoReposition: true, //This is the new autoReposition setting
buttons: {
"Ok": function() {
$(this).dialog("close");
}
}
});
});
Teraz to okno dialogowe zawsze będzie się zmieniać. AutoReposition (lub jakkolwiek nazywasz to ustawienie) może obsłużyć wszystkie okna dialogowe, które nie mają domyślnej pozycji i automatycznie zmienić ich położenie, gdy okno zmieni rozmiar. Ponieważ ustawiasz to podczas tworzenia okna dialogowego, nie musisz w jakiś sposób identyfikować okna dialogowego, ponieważ funkcja zmiany położenia zostaje wbudowana w samo okno dialogowe. A najlepsze jest to, że ponieważ jest to ustawiane w oknie dialogowym, możesz zmienić położenie niektórych dialogów, a inne pozostać na swoim miejscu.
Podziękowania dla użytkownika scott.gonzalez na forach jQuery za kompletne rozwiązanie.