Подтвердить что ты не робот

Диалоговое окно JQuery UI не размещено на центральном экране

У меня есть диалоговое окно jQuery, которое предназначено для размещения в середине экрана. Тем не менее, он кажется немного нецентрированным по вертикали.

Вот код:

$('#add_box').dialog({
    autoOpen: true,
    width: 300,
    modal: true,
    resizable: false,
    bgiframe:true
});

Любые идеи, почему это не будет сосредоточено?

4b9b3361

Ответ 1

Если окно просмотра будет прокручиваться после появления диалогового окна, оно больше не будет центрировано. Это позволяет непреднамеренно заставлять видовое окно прокручиваться, добавляя/удаляя содержимое со страницы. Вы можете повторно открыть диалоговое окно во время событий прокрутки/изменения размера, вызвав:

$('my-selector').dialog('option', 'position', 'center');

Ответ 2

Вы добавляете jquery.ui.position.js на свою страницу? У меня была та же проблема, проверил исходный код здесь и понял, что я не добавил, что js на мою страницу, после этого.. диалог магически центрирован.

Ответ 3

Копаем старую могилу здесь, но для новых поисковиков Google.

Вы можете сохранить положение окна модели, когда пользователи прокручиваются, добавляя это событие в свой диалог. Это изменит его от абсолютно позиционированного до фиксированного. Нет необходимости контролировать прокрутку событий.

open: function(event, ui) {
    $(this).parent().css('position', 'fixed');
}

Ответ 4

У меня была такая же проблема. Он оказался плагином jquery.dimensions.js. Если я удалю его, все будет хорошо. Я включил его из-за другого плагина, который этого требовал, однако я узнал из здесь, что измерения были включены в ядро ​​jQuery довольно давно (http://api.jquery.com/category/dimensions). Вы должны быть в порядке, просто избавляясь от плагина размеров.

Ответ 5

Просто добавьте строку CSS на той же странице.

.ui-dialog 
{
position:fixed;
}

Ответ 6

1.) Диалог jQuery центрируется в любом элементе, в который вы его ввели.

Без дополнительной информации, я предполагаю, что у вас есть div тела с краем или что-то вроде того. Переместите всплывающее окно на уровень тела, и вам будет хорошо идти.

2.) Если вы динамически добавляете содержимое в div при его загрузке, центрирование НЕ будет правильным. НЕ показывайте div до тех пор, пока у вас нет данных, которые вы вставляете в него.

Ответ 7

Чтобы устранить эту проблему, я убедился, что мой рост был установлен на 100%.

body { height:100% }

Это также поддерживает центральное положение во время прокрутки пользователя.

Ответ 8

Для меня jquery.dimensions.js был Culprit

Ответ 9

Эта проблема часто связана с открытием диалога с помощью тега привязки (<a href='#' id='openButton'>Open</a>) и не предотвращения поведения браузера по умолчанию в обработчике, например.

$('#openButton').click(function(event) {
   event.preventDefault();
   //open dialog code...
});

Это обычно устраняет необходимость в любых плагинах позиционирования/прокрутки.

Ответ 10

Добавьте это в объявление диалога

my: "center",
at: "center",
of: window

Пример:

$("#dialog").dialog({
       autoOpen: false,
        height: "auto",
        width: "auto",
        modal: true,
         my: "center",
         at: "center",
         of: window
})

Ответ 11

Я столкнулся с тем же вопросом, что диалог не открывается по центру и прокручивает мою страницу вверху. Тег, который я использую для открытия диалогового окна, является тегом привязки:

<a href="#">View More</a>

Символ фунта вызывал эту проблему для меня. Все, что я сделал, это изменить href в якоре так:

<a href="javascript:{}">View More</a>

Теперь моя страница счастлива и центрирует диалоги.

Ответ 12

Мой сценарий: Мне пришлось прокручивать страницу вниз, чтобы открыть диалог нажатием кнопки, из-за прокрутки окна диалог не открывался вертикально по центру окна, он вышел из порта просмотра.

Как уже упоминалось выше Ken, после того, как вы установили свой модальный контент, выполните инструкцию ниже.

$("selector").dialog('option', 'position', 'center');

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

$( ".selector" ).dialog({
open: function( event, ui ) {
//Do DOM manipulation if needed before executing below statement
$(this).dialog('option', 'position', 'center');
}
});

Это сработало для меня, и самое лучшее, что вы не включаете в него какой-либо другой плагин или библиотеку для работы.

Ответ 13

Просто решена та же проблема, проблема в том, что я не импортировал некоторые js файлы, например widget.js:)

Ответ 14

Ни одно из вышеперечисленных решений, похоже, не работало для меня, так как мой код динамически генерирует два сдерживания div и внутри него не кэшированное изображение. Мое решение было следующим:

Обратите внимание на вызов "load" на img и параметр "закрыть" в диалоговом вызове.

var div = jQuery('<div></div>')
                  .attr({id: 'previewImage'})
                  .appendTo('body')
                  .hide();
var div2 = jQuery('<div></div>')
                  .css({
                      maxWidth: parseInt(jQuery(window).width() *.80) + 'px'
                      , maxHeight: parseInt(jQuery(window).height() *.80) + 'px'
                      , overflow: 'auto'
                  })
                  .appendTo(div);
var img = jQuery('<img>')
                  .attr({'src': url})
                  .appendTo(div2)
                  .load(function() {
                      div.dialog({
                          'modal': true
                          , 'width': 'auto'
                          , close: function() {
                               div.remove();
                          }
                      });
                  });

Ответ 15

Вот как я решил проблему, я добавил эту открытую функцию диалога:

  open: function () {
                $('.ui-dialog').css("top","0px");                                
                    }

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

Ответ 16

чтобы поместить диалог в центр экрана:

$('#my-selector').parent().position({
                    my: "center",
                    at: "center",
                    of: window
});

Ответ 17

У меня была та же проблема, которая была исправлена, когда я ввел высоту для диалога:

$("#dialog").dialog({
    height: 500,
    width: 800
});

Ответ 18

Вы должны добавить объявление

В верхней части документа.

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

Ответ 19

$("#dialog").dialog({
       autoOpen: false,
        height: "auto",
        width: "auto",
        modal: true,
         my: "center",
         at: "center",
         of: window
})

Это решение работает, но только из-за того, что новые версии jQuery игнорируют это полностью и возвращаются к умолчанию, что и есть именно это. Таким образом, вы можете просто удалить позицию: "центр" из ваших параметров, если вы хотите, чтобы всплывающее окно было центрировано.

Ответ 20

Мне пришлось добавить это в начало моего HTML файла: <!doctype html>. Мне не нужно было устанавливать свойство position. Это с jQuery 3.2.1. В 1.7.1 это не было необходимо.