JQuery UI dialog - Окно внешнего окна прокручивается в диалоговом окне
Я использую диалог jQuery UI, чтобы отобразить всплывающее окно, содержащее страницу. Когда я просматриваю всплывающее окно, и если полосы прокрутки приближаются к основанию, родительская страница начинает прокрутку. Как я могу ограничить родительскую страницу прокруткой во время прокрутки внутри диалогового окна?
Я создал модальный диалог, используя следующий код.
// Dialog
$('#dialog').dialog({
autoOpen: false,
width: 800,
height: 550,
minHeight: 500,
maxHeight: 800,
minWidth: 500,
maxWidth: 900,
modal: true,
buttons: {
"Cancel": function () {
$(this).dialog("close");
}
}
});
$('#AddNewItems').click(function () {
var currentURL = getURLOfCurrentPage();
$('#dialog').dialog('open');
$("#dialog").dialog("option", "width", 800);
$("#dialog").dialog("option", "height", 550);
$("#dialog").dialog( "option", "draggable", false );
$("#dialog").dialog( "option", "modal", true );
$("#dialog").dialog( "option", "resizable", false );
$('#dialog').dialog("option", "title", 'My Title');
$("#modalIframeId").attr("src", "http://myUrl");
return false;
});
Ответы
Ответ 1
Это то, что я использую:
$('#dialog').dialog({
autoOpen: false,
width: 800,
height: 550,
minHeight: 500,
maxHeight: 800,
minWidth: 500,
maxWidth: 900,
modal: true,
buttons: {
"Cancel": function () {
$(this).dialog("close");
}
},
open: function(){
$("body").css("overflow", "hidden");
},
close: function(){
$("body").css("overflow", "auto");
}
});
Ответ 2
Что-то вроде этого может работать (это не проверено):
<script type="text/javascript" language="Javascript">
var stop_scroll = false;
function scrolltop(){
if(stop_scroll == true){
scroll(0,0);
// Or window.scrollTo(0,0);
}
}
</script>
В теге тела (<body></body>
)
<body onscroll="scrolltop();" >
Наконец, установите stop_scroll
в true, когда вы открываете диалог и false, когда вы его закрываете.
Ответ 3
Решение gurun8 работало лучше всего для меня. Однако мне нужен был способ сделать это глобально. Мое приложение использует диалоги на нескольких страницах, и мне не нужно обновлять все экземпляры.
Следующий код будет обрабатывать открытие и закрытие всех диалоговых окон:
$('body').on('dialogopen', '.ui-dialog-content', function () {
var $dialog = $(this);
var $body = $('body');
var height = $body.height();
// Hide the main scrollbar while the dialog is visible. This will prevent the main window
// from scrolling if the user reaches the end of the dialog scrollbar.
$body.css('overflow', 'hidden');
// Calling resize on the dialog so that the overlay is resized for the scrollbars that are now hidden.
$dialog.resize().on('dialogclose', function () {
// Show the main scrollbars and unbind the close event handler, as if the
// dialog is shown again, we don't want the handler to fire multiple times.
$body.css('overflow', 'auto');
$dialog.off('dialogclose');
});
});
Я использую jQuery v1.8.23. Я тестировал это в Internet Explorer 8, Internet Explorer 9, Firefox 17 и Chrome 19.