2010-03-19 1 views
2

моя проблема связана с the SimpleModal jQuery plugin. У меня нет проблем с открытием модального окна, но как только он открывается, он остается там, где он [центрирован] на экране, однако его содержимое меняется, делая его выше и, следовательно, больше не центрируется. Есть ли простой способ перестроить его, чтобы он снова центрировался?Вопрос о плагине SimpleModal jQuery - можно перецентрировать после первоначального открытия?

EDIT: Я думаю, что это помогло бы объяснить мою проблему, показывая два скриншота: before & after - в основном я использую slideUp & slideDown функциональность JQuery, чтобы скрыть форму кредитной карты в зависимости от того, является ли пользователь платит через наличными/чеком или кредитной картой. Очевидно, что с полями кредитных карт высота контейнера увеличивается.

Я попытался добавить $("div#modal-element").setPosition() в элемент обратного вызова slideUp/slideDown, но безрезультатно - фактически setPosition() бросает ошибку JS, потому что, по-видимому, функция не существует. Я всегда пытался добавить параметр autoResize и установить его в true.

+0

Я ответил на ваш вопрос, удалил его, а затем отредактировал ... но забыл восстановить его до сих пор. Сообщите мне, если это не поможет решить ваш вопрос. Ответ Ника Крейвера тоже поможет, если у вас нет autoPosition: false в параметрах. –

ответ

3

Поскольку SimpleModal подстроена для обработки повторного центрирования на изменения размеров окна, самый простой метод должен был бы вызвать это событие. После изменения содержимого, просто позвоните по этому адресу:

$(window).resize(); 
+0

@Nick - я думаю, что мы на правильном пути, но по какой-то причине это заставляет мой модальный ящик оставаться там, где он есть add scrollbars –

+0

@Andrew G. Johnson - К сожалению, SimpleModal не раскрывает объект diaog (вне его обратных вызовов), ближе всего вы можете добраться до его события: '$ (window) .trigger ('resize.simplemodal');' –

2

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

$(element).modal({ 
    onShow: function (dialog) { 
     var modal = this; 

     // do stuff and change the container dimensions 

     modal.setPosition(); // re-center the container 
    } 
}); 

Я не тестировал код, но он должен работать.

НТН

+0

@ Эрик. Можете ли вы быстро взглянуть на мои скриншоты и посмотреть, думаете ли вы, что это должно работать? Мой код кажется, что функция setPosition() не существует –

+0

Вы отправили ее мне? Пока вы вызываете его из «этого» в обратном вызове, он должен работать ... –