Модификации штабелирования прокручивают главную страницу при закрытии

С помощью Bootstrap 3.3.1 мне удалось получить модальности стеков без каких-либо дополнительных скриптов (например, при копировании в модальные шаблоны на сайте Bootstrap и создании многих из них на одной странице). Проблема заключалась в том, что всякий раз, когда верхний (самый высокий) модальный закрывается, прокрутка фокуса переходит на главную страницу (по всем остальным модалям) и возвращается к верхнему модальному только в том случае, если открыт новый модаль. Есть ли способ установить фокус прокрутки на следующую модальную, а не на главную страницу?

Когда я протестировал решение здесь (и даже этот), добавив текст в body и индивидуальный modals (через Firefox "Редактировать как HTML" для проверки прокрутки), и у него были характеристики, которые мне нужны.

Проблема, возникшая, когда я попробовал ее с последними jQuery и Bootstrap, заключалась в том, что modal-backdrop затем отображается над modal-dialog. При проверке элемента каждый раз, когда один или несколько модалов встанут, я заметил, что div для modal-backdrop появляется в главном div modal:

<div id="myModal" class="modal fade" aria-hidden="true" style="display: none;">
  <div class="modal-backdrop fade in"></div>
  <div class="modal-dialog modal-lg"></div>
</div>

по сравнению со дном body, как это здесь. Это даже происходит, когда я использую 3.3.1 на этом связанном примере. Я думаю, что это привело к тому, что основные div и modal-backdrop имели модифицированный z-index, но не modal-dialog, поэтому я попытался исправить его, добавив строку, чтобы установить modal-dialog на родительский z-index plus 1. Он помещает фоны в нужное место, но проблема с прокруткой сохраняется. Это из-за изменения в 3.3.1 или я искал неправильное решение?

Ответ 1

Заставка не проблема. Невозможно прокрутить показанные модальности, если верхняя часть закрыта.

Вы должны добавить следующий Javascript:

$('.modal').on('hidden.bs.modal', function (e) {
    if($('.modal').hasClass('in')) {
    $('body').addClass('modal-open');
    }    
});

demo: http://jsfiddle.net/u038t9L0/1/

Когда тело имеет класс modal-open, для вашего .modals будет применен следующий CSS:

.modal-open .modal {
  overflow-x: hidden;
  overflow-y: auto;
}

Закрытие модальности также удалит класс modal-open из модального.