// when any modal is opening
$('.modal').on('show.bs.modal', function (e) {
// disable your handler
})
// when any modal is closing
$('.modal').on('hide.bs.modal', function (e) {
// enable your handler
})
function eventHandler(e) {
// if a modal is open
if(isABootstrapModalOpen()) {
// prevent the event default action
e.preventDefault();
// and exit the function now
return;
}
// if a modal is not open
// proceed to the rest of the handler's code
}
$(document).find('.modal').each(function(e) {
var element = $(this);
if ( (element.data('bs.modal') || {isShown: false}).isShown ) {
console.log('a modal is open');
}
});
$(document)
.on('hidden.bs.modal', '.modal', function() {
/**
* Check if there are still modals open
* Body still needs class modal-open
*/
if($('body').find('.modal.show').length) {
$('body').addClass('modal-open');
}
})
;
8条答案
按热度按时间oogrdqng1#
如果您正在使用jquery,则可以使用以下命令:
香草JS溶液:
此解决方案适用于任何模态,而不仅仅是特定模态。
Edit:上面的代码测试在任何给定的时刻,模态是否打开。如其他答案所示,如果你想在模态打开时禁用事件处理程序,你必须使用 Bootstrap 事件,如下所示:
您还可以在事件处理程序中使用isABootstrapModalOpen,以测试是否必须执行处理程序的代码(这样就不必在每次打开/关闭模态时启用/禁用处理程序)。
okxuctiv2#
Bootstrap模态在打开时触发事件。在您的情况下,我建议将一个事件绑定到
show.bs.modal
事件,并取消绑定您的键处理程序事件。简单的例子:文件:请向下卷动至“事件”。
wswtfjt73#
"拿着这个"
eblbsuwk4#
我的解决方案是使用jQueries的hasClass方法。
v2g6jxz65#
您可以尝试:
nimxete26#
对于Bootstrap 4,如果打开,则模态具有类“show”
因此要检查是否有模态打开:
我目前使用的是堆叠式模态(multiple open),问题是,如果你对单个模态执行.modal('hide'),Bootstrap会从body元素中删除class .modal-body。然后模态不再滚动,所以我不得不这样做:
628mspwn7#
虽然不是这个直接问题的答案,但它是相关的。下面是如何检查是否在Bootstrap 4模态中:
if (window.parent.jQuery('.modal-content').length > 0) { // in a modal }
1hdlvixo8#
您可以使用此选项: