Sau khi thấy nhiều bản sửa lỗi cho điều này, và không ai trong số chúng là chính xác những gì tôi cần, tôi đã đưa ra một giải pháp thậm chí ngắn hơn lấy cảm hứng từ @YermoLamers & @Ketwaroo.
Khắc phục chỉ số z phía sau
Giải pháp này sử dụng setTimeout
vì .modal-backdrop
không được tạo khi sự kiện show.bs.modal
được kích hoạt.
$(document).on('show.bs.modal', '.modal', function () {
var zIndex = 1040 + (10 * $('.modal:visible').length);
$(this).css('z-index', zIndex);
setTimeout(function() {
$('.modal-backdrop').not('.modal-stack').css('z-index', zIndex - 1).addClass('modal-stack');
}, 0);
});
- Điều này hoạt động cho mọi
.modal
được tạo trên trang (ngay cả phương thức động)
- Phông nền ngay lập tức phủ lên phương thức trước đó
Nếu bạn không thích chỉ mục z được mã hóa cứng vì bất kỳ lý do gì, bạn có thể tính chỉ số z cao nhất trên trang như thế này:
var zIndex = Math.max.apply(null, Array.prototype.map.call(document.querySelectorAll('*'), function(el) {
return +el.style.zIndex;
})) + 10;
Sửa chữa thanh cuộn
Nếu bạn có một phương thức trên trang của bạn vượt quá chiều cao trình duyệt, thì bạn không thể cuộn trong đó khi đóng một phương thức thứ hai. Để sửa lỗi này, hãy thêm:
$(document).on('hidden.bs.modal', '.modal', function () {
$('.modal:visible').length && $(document.body).addClass('modal-open');
});
Các phiên bản
Giải pháp này được thử nghiệm với bootstrap 3.1.0 - 3.3.5