ChatGPT解决这个技术问题 Extra ChatGPT

禁止关闭 Twitter Bootstrap 模式窗口

我正在使用 Twitter Bootstrap 创建一个模式窗口。默认行为是,如果您在模态区域之外单击,模态将自动关闭。我想禁用它——即在模式外部单击时不关闭模式窗口。

有人可以分享 jQuery 代码来做到这一点吗?

您可能有一个完全正当的理由这样做(可能还有很多其他理由)。然而,值得注意的是,一般来说,用户体验方面的考虑会建议不要这样做——大多数用户希望点击退出模式会将“下面”的内容带到“前面”。
@Trevor 这就像 modal 的反面。
如果,如果后台有一个页面,只有在用户先登录时才能激活。通过单击模态 Ok 按钮,用户将被重定向到登录页面。如果用户可以直接点击退出,这意味着用户跳过了登录页面,直接访问了没有登录的页面。万事俱备
@Trevor我根本看不到任何证据支持您的说法。
当用户必须在模式中填写许多表单字段时,该功能是明智的。如果用户不小心点击了模态框以外的地方,那么所有输入的细节都会丢失;然后他们将不得不重新激活模式并重新填充字段。此功能将避免这种刺激。

P
Peter Mortensen

我相信您想将背景值设置为静态。如果您想避免在使用 Esc 键时关闭窗口,您必须设置另一个值。

例子:

<a data-controls-modal="your_div_id"
   data-backdrop="static"
   data-keyboard="false"
   href="#">

或者,如果您使用的是 JavaScript:

$('#myModal').modal({
  backdrop: 'static',
  keyboard: false
});

@user1296175 实现此目的的最终代码是什么?我也想这样做。
谢谢@nobita,添加 data-backdrop="static" 就可以了! Twitter 引导文件很差:(
检查@@Varun Chatterji 的答案并将其包含在您的模态定义中
使用单行 js 禁用所有模式的外部点击: $.fn.modal.Constructor.DEFAULTS.backdrop = 'static';
对于 Angular 用户: var modalInstance = $modal.open({ templateUrl: 'modalTemplate.html', controller: 'modalController', background: 'static', });
N
Nirmal

只需将 backdrop 属性设置为 'static'

$('#myModal').modal({
  backdrop: 'static',
  keyboard: true
})

您可能还希望将 keyboard 属性设置为 false,因为这样可以防止通过按键盘上的 Esc 键关闭模式。

$('#myModal').modal({
  backdrop: 'static',
  keyboard: false
})

myModal 是包含您的模态内容的 div 的 ID。


是的,这是最干净、最简单的答案(因为它避免了添加数据属性)。作为参考,backdropkeyboardOptions 部分下被提及 here in their documentation
数据属性是要避免的吗?请对此进行指导。
@GopalAggarwal:取决于您如何设置模态。如果您将模态与多个锚标记相关联,那么使用数据属性可能是有意义的。但是,当每个标签只有一个模式时,我会使用脚本参数,其中每个行为都在一个地方可见。
也为了避免模态显示立即传入 show: false
V
Varun Chatterji

您还可以在模态定义本身中包含这些属性:

<div class="modal hide fade" data-keyboard="false" data-backdrop="static">

是的,这是最干净、最简单的答案(因为它通过添加数据属性来工作)。作为参考,背景和键盘在其“选项”部分下的文档中提到。
如果您在页面加载时启动模式,这是删除其他关闭选项的最佳方式。
P
Peter Mortensen

如果您已经初始化了模态窗口,那么您可能需要使用 $('#myModal').removeData("modal").modal({backdrop: 'static', keyboard: false}) 重置选项以确保它将应用新选项。


这帮助了我。设置“背景:'静态'”后,用户仍然可以通过单击关闭模式;看起来像一个错误,但这成功了!
现在: $('#modal').removeData('bs.modal').modal({backdrop: 'static', keyboard: false});
P
Peter Mortensen

覆盖 Dialog 的 Bootstrap 'hide' 事件并停止其默认行为(以释放对话框)。

请看下面的代码片段:

   $('#yourDialogID').on('hide.bs.modal', function(e) {

       e.preventDefault();
   });

在我们的情况下它工作正常。


那么,如何还原呢?
只是优雅。 thx :) 而@sertaconay 只是创建一个布尔变量(例如),将检查它以确定您是否要阻止默认值
在打开模式后唯一有效的选项
如果您想更好地控制模式何时可关闭以及何时不可关闭,这是一个完美的解决方案。
P
Peter Mortensen

是的,你可以这样做:

<div id="myModal"  tabindex="-1" role="dialog"
     aria-labelledby="myModalLabel"
     aria-hidden="true"
     data-backdrop="static"  data-keyboard="false">

这对于在 html 中声明模态并且仅通过 javascript 打开的情况是完美的 - 即没有指向它的链接。谢谢!
P
Peter Mortensen

有点像@AymKdn's answer,但这将允许您在不重新初始化模式的情况下更改选项。

$('#myModal').data('modal').options.keyboard = false;

或者,如果您需要执行多个选项,JavaScript 的 with 在这里会派上用场!

with ($('#myModal').data("modal").options) {
    backdrop = 'static';
    keyboard = false;
}

如果 modal 已经打开,这些选项只会在下次打开 modal 时生效。


stackoverflow.com/questions/16030448/… 但我不喜欢这个解决方案
V
Vivek

只需添加这两件事

data-backdrop="static" 
data-keyboard="false"

现在看起来像这样

<div class="modal fade bs-example-modal-sm" id="myModal" data-backdrop="static" data-keyboard="false" tabindex="-1" role="dialog" aria-labelledby="mySmallModalLabel" aria-hidden="true">

它将禁用转义按钮以及单击任意位置并隐藏。


这个建议是几年前提供的。
E
Eric B

您可以禁用背景的点击关闭行为,并通过将此 JavaScript 添加到您的页面将其设为所有模式的默认设置(确保在加载 jQuery 和 Bootstrap JS 后执行它):

$(function() {
    $.fn.modal.Constructor.DEFAULTS.backdrop = 'static';
});

J
Jérémie Bertrand

正如 D3VELOPER 所说,以下代码解决了它:

$('#modal').removeData('bs.modal').modal({backdrop: 'static', keyboard: false});

我同时使用 jquery 和引导程序和简单的 removeData('modal') 不起作用。


j
johnnyRose

我发现的最好的就是将此代码添加到链接中

<!-- Link -->
<a href="#mdl" role="button"  data-backdrop="static" data-keyboard="false" data-toggle="modal" id_team="" ></a>
<-- Div -->
<div id="mdl" class="modal hide fade" tabindex="-1" role="dialog" data-keyboard="false" data-backdrop="static"></div>

j
johnnyRose

如今,这样做非常容易。只需添加:

data-backdrop="static" data-keyboard="false" 

在您的模态分隔符中。


几年前在同一页面上提供了此建议。
D
Drew

如果有人从 Google 来到这里试图弄清楚如何阻止某人关闭模式,请不要忘记模式的右上角还有一个需要删除的关闭按钮。

我使用了一些 CSS 来隐藏它:

#Modal .modal-header button.close {
    visibility: hidden;
}

请注意,使用“显示:无;”创建模态时会被覆盖,所以不要使用它。


你不能也只是从模态标题中删除按钮吗?
有时使用 CSS 而不是更改 HTML 是有益的。
M
Mohd Abdul Mujib

如果您想有条件地禁用 backdrop click closing 功能。您可以使用以下行在运行时将 backdrop 选项设置为 static

引导 v3.xx

jQuery('#MyModal').data('bs.modal').options.backdrop = 'static';

引导 v2.xx

jQuery('#MyModal').data('modal').options.backdrop = 'static';

这将阻止已实例化的模型将 backdrop 选项设置为 false默认行为)关闭。


H
H_H

您可以使用以下代码行设置模式弹出窗口的默认行为:

 $.fn.modal.prototype.constructor.Constructor.DEFAULTS.backdrop = 'static';

像 +1 这种方法一样,我不希望所有模式都使用该选项。
s
s-79

Bootstrap 5 中的属性名称已更改。您可以使用以下内容:

data-bs-backdrop="static" data-bs-keyboard="false"

C
Chester Chu

BS 5

<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#staticBackdrop">
  Launch static backdrop modal
</button>

<div class="modal fade" id="staticBackdrop" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="staticBackdropLabel" aria-hidden="true">
  <div class="modal-dialog">
   ...
  </div>
</div>

BS 4.4

<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#staticBackdrop">
  Launch static backdrop modal
</button>

<div class="modal fade" id="staticBackdrop" data-backdrop="static" tabindex="-1" role="dialog" aria-labelledby="staticBackdropLabel" aria-hidden="true">
  <div class="modal-dialog" role="document">
   ...
  </div>
</div>

m
miguelmpn

好吧,这是你们中的一些人可能正在寻找的另一种解决方案(就像我一样..)

我的问题是类似的,当我在里面的 iframe 加载时,模式框正在关闭,所以我必须禁用模式关闭,直到 iframe 完成加载,然后重新启用。

此处介绍的解决方案并非 100% 有效。

我的解决方案是这样的:

showLocationModal = function(loc){

    var is_loading = true;

    if(is_loading === true) {

        is_loading  = false;
        var $modal   = $('#locationModal');

        $modal.modal({show:true});

        // prevent Modal to close before the iframe is loaded
        $modal.on("hide", function (e) {
            if(is_loading !== true) {
                e.preventDefault();
                return false
            }
        });

        // populate Modal
        $modal.find('.modal-body iframe').hide().attr('src', location.link).load(function(){

            is_loading = true;
     });
}};

所以我暂时阻止模态关闭:

$modal.on("hide", function (e) {
    if(is_loading !== true) {
        e.preventDefault();
        return false
    }
});

但是 var is_loading 将在 Iframe 加载后重新启用关闭。


s
shiva krishna
<button type="button" class="btn btn-info btn-md" id="myBtn3">Static 
Modal</button>

<!-- Modal -->
<div class="modal fade" id="myModal3" role="dialog">
<div class="modal-dialog">
  <!-- Modal content-->
  <div class="modal-content">
    <div class="modal-header">
      <button type="button" class="close" data-dismiss="modal">×</button>
      <h4 class="modal-title">Static Backdrop</h4>
    </div>
    <div class="modal-body">
      <p>You cannot click outside of this modal to close it.</p>
    </div>
    <div class="modal-footer">
      <button type="button" class="btn btn-default" data-
      dismiss="modal">Close</button>
    </div>
   </div>
  </div>
</div>
   <script>
    $("#myBtn3").click(function(){
     $("#myModal3").modal({backdrop: "static"});
    });
   });
  </script>

S
SaiSurya

根据引导程序 5 更新的语法如下。
Reference Link

<div class="modal fade" data-bs-backdrop="static" data-bs-keyboard="false" >

m
mohamed sulibi

为了在模式显示后更新 Bootstrap 4.1.3 中的背景状态,我们使用了 Bootstrap-Modal-Wrapper 插件中的以下行。 Plugin Repository code reference

$("#yourModalElement").data('bs.modal')._config.backdrop = (true : "static");

b
bharat

尝试主线:

<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="verifyModalLabel" aria-hidden="true">

e
edmakalla
$(document).ready(function(e){

  $("#modalId").modal({
     backdrop: 'static',
     keyboard: false,
     show: false
  });

});

"backdrop:'static'" 将阻止在模式外部单击时关闭; "keyboard: false" 指定可以通过转义键 (Esc) 关闭模态框 "show: false" 将在页面完成加载后隐藏模态框


C
Cristiano Felipe

作为答案提出的解决方案不起作用,出了什么问题?

$(document).ready(function(){ $('.modal').modal('show'); $('.modal').modal({ background: 'static', keyboard: false }) }) ;


您应该将此作为新问题发布,而不是作为现有问题的答案。您的新问题可以参考这个原始帖子。
k
kishan maru

When backdrop is set to static, the modal will not close when clicking outside it. Click the button below to try it. use data-bs-backdrop="static" data-bs-keyboard="false" for bootstrap 5 and data-backdrop="static" data-keyboard="false" for bootstrap 4

< !-- Bootstrap 5 CSS -->

当背景设置为静态时,在其外部单击时,模态将不会关闭。单击下面的按钮进行尝试。使用 data-bs-backdrop="static" data-bs-keyboard="false"
当背景设置为静态时,模态不会关闭在外面点击。单击下面的按钮进行尝试。使用 data-backdrop="static" data-keyboard="false"
< /正文>