如何使用“Esc”键盘按钮关闭多模式表单?

Posted

技术标签:

【中文标题】如何使用“Esc”键盘按钮关闭多模式表单?【英文标题】:How to close multi modal forms right with the "Esc" keyboard button? 【发布时间】:2018-06-25 04:29:56 【问题描述】:

我找到了this question 关于如何避免第二个模态的覆盖。所以我应用了@A1rPun 修复:

$(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);
);

$(document).on('hidden.bs.modal', '.modal', function () 
    $('.modal:visible').length && $(document.body).addClass('modal-open');
);

现在,当我按下Esc 按钮时,后面的模态表单将关闭。但是,前面的表格是必须关闭的。

我试图通过添加一些像下面的代码这样的监听器来修复它。但如果我这样做,有时两种形式都会同时关闭。也许是因为已经有另一个听众了。

$(document).ready(function() 
    $(window).keydown(function(event)
        if (event.keyCode == 27)   // Esc code
            if ($('.modal-form').length > 0) 
                let z = 0;
                let modal_to_close = null;
                $('.modal-form').each(function () 
                    let current_z = parseInt($(this).css('z-index'), 10);
                    if (z < current_z) 
                        z = current_z;
                        modal_to_close = $(this);
                    
                )
                modal_to_close.find('.close').click();
            
        
    );
);

我怎样才能使这项工作顺利进行?我应该覆盖 Bootstrap keydown 侦听器吗?怎么做?

注意:我使用的是 Bootstrap v3.3.7

【问题讨论】:

【参考方案1】:

例如,您需要在所有模式上使用tabindex="-1"

&lt;div class="modal fade" id="myModal" tabindex="-1"&gt;

Working Fiddle

【讨论】:

当我在前面的模态表单中按Esc 时,我需要单击后面的表单以再次用Esc 关闭它。但这对我来说已经足够了,好方法

以上是关于如何使用“Esc”键盘按钮关闭多模式表单?的主要内容,如果未能解决你的问题,请参考以下文章

在 Bootstrap 模式窗口中单击 Enter 并点击提交按钮时提交表单数据

Twitter Bootstrap / jQuery - 如何暂时防止模式被关闭?

提交后如何关闭引导模式?

键盘Esc键怎么设置关闭窗口

如何使用 Python 和 Selenium 发送 ESC 键以关闭弹出窗口?

如何使用按钮在文本视图中显示文本?就像它是一个键盘[关闭]