2010-05-05 8 views
20

Я пытаюсь открыть диалог модальный Jquery с помощью JQuery 1.4 и JQuery-UI-1.8rc3.custom.jsОкно прокрутки вверх, когда диалог JQuery открывает

Диалог открывает без проблем, во всех браузерах, но в IE 7 и 6 после того, как диалог открывается, окно прокручивается до buttom ... Я пробовал прокрутку окна до модального положения, но очень непоследователен. использовал следующую строку коды после открытия модального

window.scrollTo($('#selector').dialog('option', 'position')[0],$('#selector').dialog('option', 'position')[1]); 

Одна странной вещи я заметил, что после того, как я открыть модальный, страница становится огромной ... как если бы некоторые дополнительные вещи складывает на снизу .... и он в конце концов прокручивается на дно. Любая идея, почему это может быть hapenning

в HTML

<div id="selector"> 
</div> 

в document.ready

$('#selector').dialog({ 
    bgiframe: true, 
    autoOpen: false, 
    width: 100, 
    height: 100, 
    modal: true, 
    position: 'top' 
}); 

в Js

$('#selector').dialog('open'); 

ответ

3

Похоже, вам не хватает # в вашей селектор:

window.scrollTo($('#selector').dialog('option', 'position')[0], $('#selector').dialog('option', 'position')[1]); 

возможно, поэтому окно прокручивается в верхний левый угол.


Edit: Я просто смотрел на документацию и .dialog('option','position') значение по умолчанию center.

позиция Тип: Строка, Массив по умолчанию: 'центр'

Указывает, где диалог должен отображаться . Возможные значения: 1) a одиночная строка, представляющая позицию в окне просмотра: 'center', 'left', 'right', 'top', 'bottom'. 2) массив , содержащий координатную пару x, y в смещение пикселей слева, верхний угол окна просмотра (например, [350,100]) 3) массив , содержащий значения строки строки x, y (например, ['right', 'top'] для верхнего правого угла ).

Таким образом, вы можете получить текст или цифры, возвращенные с использованием опциона позиции, а window.scrollTo() требует номеров. Так что попробуйте вместо этого:

var d = $(".ui-dialog").position(); 
window.scrollTo(d.left , d.top); 
+0

О ... Я думаю, что я пропустил, когда я скопировал код в stackoflow.com и редактировать его, он имеет знак «#» ... Спасибо за указав его хоть! –

+0

Я обновил свой ответ. – Mottie

+0

Прошу прощения, у меня не было возможности реализовать ваше предложение до сих пор. Дайте мне несколько часов, и я вернусь к вам. Большое спасибо за возвращение! –

1

У меня была похожая ситуация, когда диалоговое окно было открытие, где он должен на странице, но пользователь был перенаправлен в нижней части страницы. В принципе, я забыл включить соответствующий css для соответствия JavaScript-библиотеке jQuery UI. Делая это, все было в порядке. Я предполагаю, что это что-то вроде этого, где есть стили, установленные на элементах jQuery css, которые не установлены в вашем собственном CSS.

Чтобы отладить проблему, поэтому мне не нужно было включать весь jQuery UI css, я сделал две идентичные страницы, один из которых использовал jQuery UI css, а другой - и не просто проверил, что в css с помощью Firebug на Firefox и добавил эти стили к моему css.

Надеюсь, это поможет. Mag

6

Я тоже боролся с этой проблемой. Я не использовал тематизации поэтому у меня не было этой важной CSS свойство:

position:absolute; 

я добавил это в мой файл CSS и теперь все работает отлично:

.ui-widget { position: absolute; } 
+0

Это не сработало для меня – Mike

37

Если вы используете якорь тег, как показано ниже, чтобы вызвать диалоговое окно

<a href="#" onclick="$(#id).dialog('open');">open dialog</a> 

вы хотите добавить return false; к атрибуту onclick:

<a href="#" onclick="$(#id).dialog('open'); return false;">open dialog</a> 

Это предотвращает перегрузку страницы на якорь #, что заставляет ее прыгать вверх.

+2

Это действительно помогло. Когда я открывал модальный режим, в FF экран переместился бы вверх, но модальный остался бы на месте. – Adam

3

Я имел эту проблему, потому что я присвоение класса диалога, что в моей таблице стилей устанавливали:

position: relative; 

который переопределяя:

position: absolute; 

необходим в диалоге.

В принципе, сделать определенные .ui-диалог имеет класс:

position: absolute; 

и окно не должно перейти к нижней части страницы и дополнительного вертикального пространства не будет добавлен к телу.

1

Как я установил его:

HTML

<a href="javascript:openDialogFunction(parameters)">...</a> 

Javascript

function openDialogFunction(parameters) { 

    var topOff = $(window).scrollTop(); 

    //code to open the dialog 

    $(window).scrollTop(topOff); 
} 
1

У меня был подобный вопрос, и это, как я решил. Это похоже на решение @bassim, но с небольшим разным вкусом.

У меня был тот же самый якорный тег и используется «$ (# якорь-элемент) .click (функция() {..} Ниже приведен фрагмент кода -.

В 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 

}); 

Это сделали трюк и решен вопрос Спасибо за остальное на этой странице, которые дали хорошие указатели и помогли решить проблему команды престижности

1

Другим решением является вызов события.preventDefault когда диалог открыт

$('#demo4').click(function() { 
    $("#tallContent").dialog("open"); 
    event.preventDefault(); 
}); 
Смежные вопросы