$('.modal').on('show.bs.modal', function() {
var nModals = $('.modal.in').length;
$(this).attr('data-nmodals', nModals+1);
backdropStack(nModals);
});
function backdropStack(nModals) {
setTimeout(function() {
$('.modal-backdrop').each(function() {
if(!$(this).attr('data-nmodals')) {
$(this).attr('data-nmodals', nModals+1);
}
});
modalStack();
}, 100);
};
function modalStack() {
$('.modal').each(function() {
$n = $(this).data('nmodals');
$z = $(this).css('z-index');
$(this).css('z-index', $n*$z);
});
$('.modal-backdrop').each(function() {
$n = $(this).data('nmodals');
$z = $(this).css('z-index');
$(this).css('z-index', $n*$z);
});
}
Объяснение: Каждый раз, когда модальный открывает, мы рассчитываем на существующие модальности и дать им номера, чтобы идентифицировать их (данные атрибутов-nmodals). Поскольку фон появляется через несколько секунд, мы ожидаем 100 миллисекунд, прежде чем считать их в функции backdropStack. И последнее, но не менее важное: функция modalStack умножает существующее значение z-index на число nModals, что означает, что мы могли бы открыть до 20 модалов, и это решение по-прежнему будет работать.
Предел - максимальный z-индекс, принятый CSS3 и браузерами. Если вы доберетесь до этого момента ... у вас, вероятно, проблема с дизайном UX!