引导模式隐藏不起作用

Posted

技术标签:

【中文标题】引导模式隐藏不起作用【英文标题】:Bootstrap modal hide is not working 【发布时间】:2014-07-03 20:56:49 【问题描述】:

警报会在其他情况下出现。但我的模态没有隐藏 添加了 bootply。我的问题是一样的。

<button class="button primary" id="buy" data-toggle="modal" data-target=".bs-example-modal-sm" style= "text-decoration:none;" type="button">Review and confirm</button>

<div class="modal-bootstrap fade bs-example-modal-sm" id="myModal" tabindex="-1" role="dialog" aria-labelledby="smallModalLabel" aria-hidden="true">
  <div class="modal-bootstrap-dialog modal-sm">
    <div class="modal-bootstrap-content">
      <div class="modal-bootstrap-body">
        -- content ----
      </div>
    </div>
  </div>
  <div class="modal-bootstrap-footer">
     <button type="submit" class="button primary" data-dismiss="modal">Close</button>
     <button type="submit" class="button primary">Save changes</button>
  </div>
</div>



<script type="text/javascript">
$("#buy").click(function () 
   var a = 4;
   if (a == 5) 
     alert("if");
     $('#myModal').modal('show');
   
   else 
    alert("else");
    $('#myModal').modal('hide');
   

);
</script>

bootply

【问题讨论】:

检查控制台是否有任何错误。如果有,请在此处发布。 你在alert()之后忘记了; .. 你的 javascript 就在 html 你的&lt;script&gt;标签在哪里? 我检查了你的代码。现在您比较 a == 5。但 a 始终为 4。您可能必须检查为什么要进行此比较。如果要从 javascript 打开模式,还需要删除数据目标: data-target 直接打开modal。检查这是否有效。 【参考方案1】:

您正在使用两种模式切换方法:通过 Javascript 和通过数据属性。因此,您的点击会触发模式显示作为您的数据属性集,并且您的 Javascript 不会影响此触发器。

只需删除数据属性并使用Javascript方法:

<button class="button primary" id="buy" style="text-decoration:none;" type="button">Review and confirm</button>

<div class="modal-bootstrap fade bs-example-modal-sm" id="myModal" tabindex="-1" role="dialog" aria-labelledby="smallModalLabel" aria-hidden="true">
    <!-- modal contents -->
</div>

<script type="text/javascript">
$("#buy").click(function () 
    var a = 4;
    if (a == 5) 
        alert("if");
        $('#myModal').modal('show');
     else 
        alert("else");
        $('#myModal').modal('hide');
    
);
</script>

【讨论】:

我现在有一个问题,可能是由于这个原因。我无法在我的本地开发环境中检测到它,但我们收到一些报告说我们的模式没有关闭并且字段被擦除。您对导致这种冲突的情况有任何想法吗?我们确实有 javascript 和指示模式关闭的数据属性,但这只是某些人的机器上的问题。它是特定版本的,我不知道,bootstrap 或 jquery 与特定版本的 Chrome 结合你有什么? @Femtosecond 如果不阅读您的代码或至少具有精确的再现条件,很难知道发生了什么,您应该问自己的问题。 仅供参考,这个答案帮助我找到了我的问题,这是在我的 类中我使用的 class="modal" 而不是 class="modal-bootstrap"。我改为 class="modal-bootstrap" 并解决了我的问题。 我认为这是我的问题,但仍然不确定如何恢复在单击模式外部时关闭模式的能力。从 blur() 事件中执行此操作似乎对我没有用。【参考方案2】:

我有同样的问题。删除fade 类。

【讨论】:

我认为这个类在js“隐藏”命令上有一个时间延迟。 哇,真的有效!谢谢你,你是救命稻草 这个答案应该更多。删除淡入淡出立即解决了问题。 问题在于'fade'类。但是你不需要删除它。执行以下操作 else $("#myModal").on('shown.bs.modal', function () $('#myModal').modal('hide'); 【参考方案3】:

我遇到了同样的问题,尝试了很多东西,但唯一对我有用的解决方案是 @Tang Chanrith 建议单独删除模态的部分,但稍微改进一下以放回和滚动条。如果接受的答案对他们不起作用,我会提出我的答案。对不起我的英语不好。希望我能帮上忙。

@Tang Chanrith

试试这个功能

function hideModal() 
  $("#myModal").removeClass("in");
  $(".modal-backdrop").remove();
  $("#myModal").hide();

改进的解决方案

您只需从生成的 body 和 css 中删除一个类

function hideModal() 
  $("#myModal").removeClass("in");
  $(".modal-backdrop").remove();
  $('body').removeClass('modal-open');
  $('body').css('padding-right', '');
  $("#myModal").hide();

【讨论】:

这会阻止它再次打开,直到刷新页面【参考方案4】:

对于那些仍然有问题的人(嗨 Google 员工!),如果您使用淡入淡出,则必须使用 javascript 删除淡入淡出类。

【讨论】:

跟我的问题一模一样。 这个答案应该更多。删除淡入淡出立即解决了问题。上面还有一条评论也有同样的答案。【参考方案5】:

试试这个功能

function hideModal()
    $("#myModal").removeClass("in");
    $(".modal-backdrop").remove();
    $("#myModal").hide();

【讨论】:

我似乎通过使用 $(",modal-backdrop").remove() 创建了一个新问题...我的滚动条也消失了!需要寻找其他解决方案。【参考方案6】:

去掉模态类“fade”就行了。

【讨论】:

简短的回答最好对问题发表评论【参考方案7】:

尝试像这样添加 return false:

$("#buy").click(function ()  
  var a = 4;
  if (a == 5) 
    alert("if");
    $('#myModal').modal('show');
  
  else 
    alert("else");
    $('#myModal').modal('hide');
  
  return false;
);

【讨论】:

它对我有用,但为什么它有效?我的意思是它解决了什么问题?【参考方案8】:

我已经解决了这个问题。

$('#landingpage, body').on('click',function()
    $( ".action-close" ).trigger( "click" ););

【讨论】:

【参考方案9】:

我检查了你的代码。 现在您比较 a == 5。但 a 始终为 4。您可能必须检查为什么要进行此比较。 如果要从 javascript 打开模式,还需要删除数据目标:

<button class="button primary" id="buy" data-toggle="modal" style="text-decoration:none;" type="button">Review and confirm</button>

data-target 直接打开modal。 检查这是否有效。

【讨论】:

【参考方案10】:

你应该试试这个$('.modal.in').modal('hide')

通过https://github.com/twbs/bootstrap/issues/489

【讨论】:

【参考方案11】:

我有同样的问题,我的错误是我试图打开模态窗口几次。在尝试打开模式窗口之前,我们必须测试它是否尚未打开。

    if (!($("#MyModal").data('bs.modal') || )._isShown) 
        $("#MyModal").modal('show');
    

【讨论】:

【参考方案12】:

使用引导程序隐藏模式对话框

方法一:使用引导

$('.close').click(); 
$("#MyModal .close").click();
$('#myModalAlert').modal('hide');

方法2:使用停止传播

$("a.close").on("click", function(e)
  $("#modal").modal("hide");
  e.stopPropagation();
);

方法3:显示方法调用后

$('#myModal').on('shown', function () 
      $('#myModal').modal('hide');
)

方法 4:使用 CSS

this.display='block'; //Set block css
this.display='none'; //set none css after close dialog

【讨论】:

【参考方案13】:

在java脚本代码中需要添加一行代码

$("#savechanges").on("click", function (e) 
        $("#userModal").modal("hide");
        e.stopPropagation(); //This line would take care of it
    );

【讨论】:

【参考方案14】:

正如我所遇到的,有时您需要删除显示样式:

style="display: block;"

【讨论】:

【参考方案15】:

我有同样的问题。我尝试了帖子中建议的 JavaScript 方式,不幸的是它只工作了一半。如果我多次触发我的模态,它就会出错。结果,我创建了一个使用 CSS 的解决方法:

/* Hide the back drop*/
.modal-backdrop.show 
    display: none;

/* Simulate the backdrop using background color */
.modal-open .modal 
    background-color: rgba(47, 117, 19, 0.3);

【讨论】:

【参考方案16】:

当我使用与该链接绑定的 data-toggle="modal" 属性单击 link 并尝试使用 javascript 关闭它时,我正在打开模式弹出窗口,但我每次都失败了,所以当我从该链接中删除“data-toggle”属性和“href”并使用javascript打开它时,它也可以使用javascript正确关闭。

从下面几行代码,你可以很容易理解

&lt;a href="#CustomerAdvancedModal" data-toggle="modal" class="classShowAdvancedSearch"&gt;Advanced Search&lt;/a&gt;

我把上面的链接改成了这个链接的东西

 <a href="#" class="ebiz-Advanced-Search classShowAdvancedSearch">Advanced Search</a>

之后,当我尝试使用 javascript 关闭它时,我就成功了

$("#CustomerAdvancedModal").modal('hide');

【讨论】:

【参考方案17】:

我也遇到了同样的问题,找不到正确的解决方案。

后来我观察到当模态运行良好时关闭时会发生什么。

三个主要属性是,

modal-open 类从 &lt;body&gt; 标记中删除。 在&lt;body&gt;标签更改CSSmodal-backdrop&lt;div&gt; 类被删除。

所以,当你手动做这些事情时,你会实现它,当不工作时。

Jquery中的代码应该如下,

      $('body').removeClass('modal-open');        
      $('body').css('padding-right', '');
      $(".modal-backdrop").remove();
      $('#myModal').hide();

因此,试试这个并获得解决方案。

【讨论】:

【参考方案18】:

在打开加载模式之前,请确保关闭所有其他模式。 这是用于关闭模态的函数:

function hideLoadingModal() 
    $('#loadingModal').on('shown.bs.modal', function () 
        $('#loadingModal').modal('hide');      
    ); 

现在,如果我想打开模式,我调用上面的函数,然后打开一个新的。 像这样:

hideLoadingModal();
$('#loadingModal').modal('show');

希望对你有所帮助。

干杯

【讨论】:

【参考方案19】:

一个可能的原因应该是 jquery 和 bootstrap 的顺序,而您的脚本顺序不正确。 下面应该是顺序。

1. <script src='js/jquery-3.2.1.min.js'></script>
2. <script src='js/bootstrap.min.js'></script>
3. your own script:
<script type="text/javascript">
$("#buy").click(function () 
   var a = 4;
   if (a == 5) 
     alert("if");
     $('#myModal').modal('show');
   
   else 
    alert("else");
    $('#myModal').modal('hide');
   

);
</script>

【讨论】:

【参考方案20】:

检查是否关闭了主模式 div 内的所有嵌套 div

<div data-backdrop="static" class="modal fade" id="modal-progress" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true">

-----NESTED DIV ------------------

</div>

【讨论】:

【参考方案21】:

以上解决方案都不适合我。如果是这种情况,请尝试在关闭按钮(动态添加的按钮)上模仿 click 事件:

<div class="modal" tabindex="-1" role="dialog" id="modal" area-hidden="true" style="display: inline-block;">
        <div class="modal-dialog modal-dialog-centered" role="document">
            ...
        </div>
    <a href="#close-modal" rel="modal:close" class="close-modal ">Close</a></div>
</div>

$('.close-modal').click() 应该可以解决问题。

【讨论】:

【参考方案22】:

试试这个

给一个id来关闭按钮

<button type="submit" id="modalcloseBtn" class="button primary" data-dismiss="modal" >Close</button>

并触发onclick事件

$('#modalcloseBtn').trigger("click");

【讨论】:

以上是关于引导模式隐藏不起作用的主要内容,如果未能解决你的问题,请参考以下文章

引导模态高度上的转换不起作用

为啥引导工具提示在引导模式中不起作用?

悬停在引导模式图像中不起作用

输入类型=“日期”在引导模式下不起作用

添加命名空间后,引导模式不起作用

引导模式在 laravel 中不起作用