防止Bootstrap Modal在外部点击或按下escape时消失?

Ehs*_*adi 425 html modal-dialog twitter-bootstrap

我正在使用Twitter Bootstrap模式作为向导窗口,并且希望在单击模态外部或按下escape时阻止用户关闭它.相反,我希望在用户按下完成按钮时关闭它.我怎么能实现这种情况?

Ehs*_*adi 801

如果使用JavaScript则:

$('#myModal').modal({
    backdrop: 'static',
    keyboard: false
})
Run Code Online (Sandbox Code Playgroud)

如果是HTML:

<a data-controls-modal="your_div_id" data-backdrop="static" data-keyboard="false" href="#">
Run Code Online (Sandbox Code Playgroud)

  • 使用javascript时,您必须将键盘设置为false,以防止按ESC键关闭. (14认同)
  • 2022 年解决方案:```data-bs-backdrop="static" data-bs-keyboard="false"``` (4认同)
  • 我通常使用$("#myModal").modal("show"); 如何在模态@Eshan Ershadi外面点击时不要消失 (3认同)
  • 我已将`data-backdrop ="static"添加到我的模态的HTML中,它正在使用BS 3.x. (2认同)

Ces*_*uel 244

也适用data-backdrop="static"于点击data-keyboard="false"你的div模式中的Esc:

<div id="idModal" class="modal hide" data-backdrop="static" data-keyboard="false">
Run Code Online (Sandbox Code Playgroud)

  • 如果你需要以编程方式设置/运行时,其他建议是正确的,但这是设计时的正确方法,我认为这是"关注点分离"的最佳方式. (4认同)
  • 我在一个页面中有两个模态.至少有一个人从来没有做过正确的事.但是这个解决方案解决了它.将它放入模态div本身也是有意义的. (2认同)

Tar*_*n.. 56

您也可以在Bootstrap模型中使用Direct.

<div class="modal fade" id="myModal" data-keyboard="false" data-backdrop="static">
Run Code Online (Sandbox Code Playgroud)


Gan*_*tta 40

只需添加data-backdrop="static"data-keyboard="false"属性到该模态.

例如.

<a data-controls-modal="your_div_id" data-backdrop="static" data-keyboard="false" href="#">
Run Code Online (Sandbox Code Playgroud)


小智 25

您可以使用以下代码

$.fn.modal.prototype.constructor.Constructor.DEFAULTS.backdrop = 'static';
Run Code Online (Sandbox Code Playgroud)

更改默认行为.


小智 16

jQuery('#modal_ajax').modal('show', {backdrop: 'static', keyboard: false});
Run Code Online (Sandbox Code Playgroud)

  • 你的答案不起作用.您必须在显示模态之前设置选项.`$('#modal').modal({backdrop:'static',keyboard:false},'show');` (14认同)
  • 虽然这段代码可能有助于解决问题,但它没有解释_why_和/或_how_它回答了这个问题.提供这种额外的背景将大大提高其长期教育价值.请[编辑]您的答案以添加解释,包括适用的限制和假设. (3认同)

小智 16

我使用这些属性,它的工作原理, data-keyboard="false" data-backdrop="static"


Roh*_*rte 11

如果在模态外单击,此代码可防止模态关闭.

   $(document).ready(function () {
    $('#myModal').modal({
           backdrop: 'static',
           keyboard: false
    })
   });
Run Code Online (Sandbox Code Playgroud)


小智 10

<button class="btn btn-primary btn-lg" data-backdrop="static" data-keyboard="false" data-target="#myModal" data-toggle="modal">
Run Code Online (Sandbox Code Playgroud)


Sum*_*pta 9

<button class='btn btn-danger fa fa-trash' data-toggle='modal' data-target='#deleteModal' data-backdrop='static' data-keyboard='false'></button>
Run Code Online (Sandbox Code Playgroud)

只需将data-background和data-keyboard属性添加到打开模型的按钮上即可。


小智 5

如果您需要禁用外部单击但启用按下转义

$('#myModal').modal({
    backdrop: 'static',   // This disable for click outside event
    keyboard: true        // This for keyboard event
})


nim*_*_10 5

The following script worked for me:

// prevent event when the modal is about to hide
$('#myModal').on('hide.bs.modal', function (e) {
    e.preventDefault();
    e.stopPropagation();
    return false;
});
Run Code Online (Sandbox Code Playgroud)


you*_*uen 5

如果您需要显示模态进行设置,您可以使用@Nabid 解决方案。但是,有时您仍然需要允许某些方法来关闭模态。假设您有一个带有 class 的按钮really-close-the-modal,它应该真正关闭模态,您可以使用以下代码(jquery):

var closeButtonClicked = false;

$('.really-close-the-modal').on('click', function () {
    closeButtonClicked = true;
});

$('#myModal').on('hide.bs.modal', function (e) {
    if (!closeButtonClicked) {
        e.preventDefault();
        e.stopPropagation();
        return false;
    }
    closeButtonClicked = false;
});
Run Code Online (Sandbox Code Playgroud)

这不是很好的代码设计,但它在模态显示与加载器动画的情况下帮助我,直到返回 ajax 请求,只有这样我才能知道是否需要配置模态以防止“隐式”关闭。您可以使用类似的设计来防止在加载时关闭模态。