Окно прокрутки, когда открывается диалоговое окно jquery
Я пытаюсь открыть модальный диалог jquery, используя jquery 1.4 и jquery-ui-1.8rc3.custom.js
Диалог открывается без проблем во всех браузерах, но в IE 7 и 6 после открытия диалогового окна окно прокручивается до buttom... Я пробовал прокрутку окна до модальной позиции, но очень противоречиво.
использовал следующую строку кода после открытия модального
window.scrollTo($('#selector').dialog('option', 'position')[0],$('#selector').dialog('option', 'position')[1]);
Одна странная вещь, которую я замечаю, заключается в том, что после того, как я открываю модальную страницу, страница становится огромной... как будто некоторые дополнительные вещи складываются на дне... и в конце концов она прокручивается к основанию.
Любая идея, почему это может быть hapenning
в html
<div id="selector">
</div>
в документе .ready
$('#selector').dialog({
bgiframe: true,
autoOpen: false,
width: 100,
height: 100,
modal: true,
position: 'top'
});
в js
$('#selector').dialog('open');
Ответы
Ответ 1
Похоже, что в селекторе отсутствует #
:
window.scrollTo($('#selector').dialog('option', 'position')[0], $('#selector').dialog('option', 'position')[1]);
возможно, поэтому окно прокручивается в верхний левый угол.
Изменить: я просто смотрел документацию, а .dialog('option','position')
значение по умолчанию - center
.
position Тип: String, Array По умолчанию: 'center'
Определяет, где должно быть диалоговое окно отображается. Возможные значения: 1) a одиночная строка, представляющая позицию в области просмотра: "центр", "левый", 'right', 'top', 'bottom'. 2) массив содержащий координатную пару x, y в смещение пикселей слева, верхний угол viewport (например, [350, 100]) 3) массив содержащие значения строки x, y (например, ['right', 'top'] для верхнего правого угол).
Таким образом, вы можете получить текст или числа, возвращенные с использованием опции позиции, а window.scrollTo()
- номера. Поэтому попробуйте это:
var d = $(".ui-dialog").position();
window.scrollTo( d.left , d.top);
Ответ 2
Если вы используете якорный тег, как показано ниже, чтобы вызвать диалог
<a href="#" onclick="$(#id).dialog('open');">open dialog</a>
вам нужно добавить атрибут return false;
в атрибут onclick
:
<a href="#" onclick="$(#id).dialog('open'); return false;">open dialog</a>
Это предотвращает перегрузку страницы для привязки #
, которая заставляет ее прыгать вверх.
Ответ 3
Я тоже боролся с этой проблемой. Я не использовал темы, поэтому у меня не было этого важного свойства CSS:
position:absolute;
Я добавил это в свой CSS файл, и теперь все работает отлично:
.ui-widget { position: absolute; }
Ответ 4
У меня была эта проблема, потому что я назначал класс в диалоговом окне, которое устанавливалось в моей таблице стилей:
position: relative;
который переопределял:
position: absolute;
необходимый для диалога.
В принципе, убедитесь, что класс .ui-dialog имеет:
position: absolute;
и окно не должно прокручиваться до нижней части страницы, а дополнительное вертикальное пространство не будет добавлено в тело.
Ответ 5
У меня была аналогичная ситуация, когда диалог открывался там, где он должен был на странице, но пользователь был перенаправлен на нижнюю часть страницы. В принципе, я забыл включить соответствующий css для соответствия JavaScript-библиотеке jQuery UI. Делая это, все было в порядке. Я предполагаю, что это что-то вроде этого, где есть стили, установленные на элементах jQuery css, которые не установлены в вашем собственном CSS.
Чтобы отладить проблему, чтобы я не включил весь jQuery UI css, я сделал две идентичные страницы, один из которых использовал jQuery UI css, а другой - и не просто проверял, что было в CSS с помощью Firebug на Firefox и добавили эти стили в мой css.
Надеюсь, это поможет.
Mag
Ответ 6
Как я его исправил:
HTML
<a href="javascript:openDialogFunction(parameters)">...</a>
Javascript
function openDialogFunction(parameters) {
var topOff = $(window).scrollTop();
//code to open the dialog
$(window).scrollTop(topOff);
}
Ответ 7
У меня была аналогичная проблема, и я решил это. Это похоже на решение @bassim, но с небольшим разным вкусом.
У меня был тот же якорный тег и использовался "$ (# anchor-element).click(function() {..}). Ниже приведен фрагмент кода -
В jsp -
<a id="open-add-comments-${site}" class="open-add-comments" href="#" site-id="${site}" project-id="${project}" >Add comments</a><br/>
В javascript -
$( ".open-add-comments" ).click(function(){
var projectId=$(this).attr("project-id");
$( "#add-comment-form" ).dialog({
//width: "auto",
width: 800,
height: "auto",
position: "absolute",
maxWidth: 800,
minWidth: 300,
maxHeight: 400,
modal: true,
title: "Adding comment for \"${project.name}\" and site \""+siteName+"\" ",
open: function(event, ui) {
$("#add-comment fieldset textarea").html("").focus();
............
.....
},
buttons: {
"Save": function() {
.... some business logic
},
Cancel: function() {
$( this ).dialog( "close" );
}
}
});
return false; // -- THIS IS IMPORTANT AND RESOLVED THE ISSUE
});
Это сделал трюк и разрешил проблему. Благодарим вас за отдых на этой странице, который дал хорошие указания и помог решить проблему. Команда Kudos.
Ответ 8
Другим решением является вызов event.preventDefault, когда диалог открыт.
$('#demo4').click(function() {
$( "#tallContent" ).dialog( "open" );
event.preventDefault();
});