检查是否有任何引导模式打开
Check if any bootstrap modal is open
如何检查任何引导模式当前是否打开?
背后的原因是:如果模态是打开的,我想停用某些键处理程序。
如果您使用的是jquery,您可以使用这个:
function isABootstrapModalOpen() {
return $('.modal.in').length > 0;
}
香草JS解决方案:
function isABootstrapModalOpen() {
return document.querySelectorAll('.modal.in').length > 0;
}
此解决方案适用于任何模式,而不仅仅适用于特定模式。
编辑:上面的代码测试在任何给定时刻,模态是否打开。如其他答案所示,如果您想在模态打开时禁用事件处理程序,则必须使用引导程序事件,如下所示:
// 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
})
您还可以在事件处理程序中使用isABootstrapModalOpen,以测试是否必须执行处理程序的代码(这样您就不必在每次打开/关闭模式时启用/禁用处理程序)。
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
}
Bootstrap模式在打开时触发事件。在您的情况下,我建议将一个事件绑定到show.bs.modal
事件,然后取消绑定密钥处理程序事件。简单示例:
$('#myModal').on('show.bs.modal', function (e) {
// yadda yadda .unbind()
})
文档:http://getbootstrap.com/javascript/#modals,向下滚动至事件。
这里取这个:
$(document).find('.modal').each(function(e) {
var element = $(this);
if ( (element.data('bs.modal') || {isShown: false}).isShown ) {
console.log('a modal is open');
}
});
我的解决方案是使用jQueries的hasClass方法。
return $('div.modal').hasClass('in'); // True if open, false if closed
你可以试试这个:
alert($('#myModal').hasClass('in'));
对于Bootstrap 4,如果打开,则模态具有类"show"
因此,检查是否有任何模式打开:
if ($('body').find('.modal.show').length) {
// Do something
}
我目前使用堆叠模态(多个打开),问题是如果你使用单个模态的.modal("隐藏")。Bootstrap从body元素中删除class.modal body。然后模态不再滚动,所以我不得不这样做:
$(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');
}
})
;
虽然不是这个直接问题的答案,但它是相关的。以下是如何在Bootstrap 4模式中检查:if (window.parent.jQuery('.modal-content').length > 0) { // in a modal }
您可以使用这个:
$('#mymodal').on('shown.bs.modal', function (e) {
console.log("Modal is open");
})
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 在javascript中调用函数/对象引用时,可容纳任何数据类型
- jqGrid - 是否有任何“网格编辑模式”
- 当我们的设备从纵向模式定向到横向模式时,当地图完全加载时,是否有任何 Map 事件被触发
- 为什么除了html5输入模式属性之外,这个简单的regex在任何地方都能工作
- 当内部的任何模式关闭时,Bootstrap模式关闭
- 任何匹配模式的方法,要么在某个字符之前,要么在某个字符之后
- 异步函数的 JavaScript 回调:是否有任何模式可以区分“返回值”和“异常”
- TinyMCE 4在IE9(任何模式)中不显示工具栏图标
- jQuery 模式对话框在刷新后的第一页上工作正常,但在此之后的任何其他页面上都无法正常工作,除非刷新
- 从自定义模块模式Javascript库调用XMLHttpRequest时不会发生任何事情
- 当单元格进入编辑模式时,禁止在除一个单元格(选定行中)之外的任何位置单击
- 当模式位于单独的文件中时,创建模型时是否存在任何问题
- 有没有任何方法可以得到正则表达式模式的所有可能结果
- JS中是否有任何模式提供了公共静态、私有和公共方法以及变量的相似性
- SVG模式,任何停止重复图像的方法/黑客
- 检查是否有任何引导模式打开
- 有没有一种方法可以在引导模式中使用引导弹出窗口
- 引导弹出窗口和一个模式(悬停和点击)
- 什么是JavaScript模式来匹配除了给定字符串以外的任何内容?