218

我正在使用引导程序在网站上工作。

基本上,我想在主页中使用一个模式,由英雄单元中的按钮召唤。

按钮代码:

<button type="button" 
    class="btn btn-warning btn-large" 
    data-toggle="modal"
    data-target="#myModal">Open Modal</button>

模式代码:

<div class="modal hide fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
  <div class="modal-header">
    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
    <h3 id="myModalLabel">In Costruzione</h3>
  </div>
  <div class="modal-body">
    <p>Test Modal: Bootstrap</p>
  </div>
  <div class="modal-footer">
    <button class="btn" data-dismiss="modal" aria-hidden="true">Chiudi</button>
    <button class="btn btn-warning">Salva</button>
  </div>
</div>

问题是,只要我单击按钮,模式就会淡入,然后立即消失。

我会很感激任何帮助。

另外,如何更改下拉三角形的颜色(指向上方,不悬停)?我正在开发一个基于橙色和棕色的网站,蓝色的东西真的很烦人。

4

27 回答 27

498

一个可能的原因

这是 Modal 插件的 JavaScript 被加载两次时的典型行为。请检查以确保插件没有被双重加载。根据您使用的平台,可以从多个来源加载模态代码。一些常见的有:

  • bootstrap.js(完整的 BootStrap JS 套件)
  • bootstrap.min.js(同上,只是缩小了)
  • bootstrap-modal.js(独立插件)
  • 一个依赖加载器,例如,require('bootstrap')

调试技巧

一个好的起点是click使用浏览器中的开发人员工具检查已注册的事件侦听器。例如,Chrome 会列出可以找到注册监听器代码的 JS 源文件。另一种选择是尝试在页面上的资源中搜索模态代码中找到的短语,例如var Modal.

不幸的是,这些并不总是在所有情况下都能找到东西。检查网络请求可以更可靠地为您提供页面上加载的所有内容的图片。

一个(损坏的)演示

这是加载bootstrap.jsbootstrap-modal.js时发生的演示(只是为了确认您的经验):

普朗克

如果您向下滚动到该页面上源代码的底部,您可以删除或注释掉bootstrap-modal.js<script>的行,然后验证现在模态将按预期运行。

于 2012-12-02T14:57:37.497 回答
98

我有同样的问题,但它有不同的原因。我按照文档创建了一个按钮,如下所示:

<button class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal">
  Launch demo modal
</button>

当我点击它时,似乎什么都不会发生。但是,该按钮位于<form>暂时只是获取同一页面的位置。

我通过添加type="button"到按钮元素来解决此问题,以便在单击时不会提交表单。

于 2014-09-11T11:42:39.883 回答
27

对我来说有效的是删除

data-toggle="modal"

从按钮。按钮本身可以是任何元素 - 链接、div、按钮等。

于 2016-09-12T13:28:09.633 回答
15

在这个问题的其他有用答案之后,我在我的 mvc 应用程序中寻找了一段时间的重复引导参考。

终于找到了——它包含在我正在使用的另一个库中,所以一点也不明显!( datatables.net)。

如果您仍然遇到此问题,请查找可能包含引导程序的其他库。(datatables.net允许您指定使用或不使用引导程序的下载 - 其他人也这样做)。

所以我bootstrap.min.js从我的身上删除了bundle.config,一切都很好。

于 2015-12-22T12:55:23.027 回答
13

同样的症状,在带有由bootstrap-sassgem 提供的 Bootstrap 的 Rails 应用程序的上下文中,@merv 的回答让我走上了正确的轨道。

我的application.js文件有以下内容:

//= require bootstrap
//= require bootstrap-sprockets

解决方法是删除两行之一。事实上,gem 的自述文件会警告您这个错误。我的错。

于 2015-03-30T12:34:22.907 回答
9

e.preventDefault(); 使用 jquery ui

对我来说,这个问题发生在 jquery ui 按钮上的 click 方法覆盖上,默认情况下会导致页面重新加载。

于 2014-04-18T13:19:29.723 回答
9

我的代码不知何故包含了两次 bootstrap.min.js。我删除了其中一个,现在一切正常。

于 2015-06-18T07:24:54.847 回答
9

我也有同样的问题,但对我来说,这是因为我在模态表单中有一个类型为“提交”的按钮。我变了

    <input  type='submit' name='submitname' id="partyBtn" value='Submit' title='Click to submit.'/>

    <input  type='button' name='submitname' id="partyBtn" value='Submit' title='Click to submit.'/>

这解决了失踪问题。

于 2016-05-16T22:50:38.643 回答
8

如果使用 jquery 两次附加事件侦听器,也会出现此问题。例如,您可以在不取消绑定的情况下进行设置:

            $("body").on("click","#fixerror",function(event){
                $("#fixerrormodal").modal('toggle')
            })

如果发生这种情况,事件将连续触发两次,并且模式消失。

            $("body").on("click","#fixerror",function(event){
                $("#fixerrormodal").modal()
                $("#fixerrormodal").modal('toggle')
            })

参见示例:http: //embed.plnkr.co/i5xB1WbX7zgXrbDMhNAW/preview

于 2014-08-26T09:33:23.937 回答
8

我遇到了@gpasse 在他的示例中显示的相同症状。这是我的代码...

<form...>
  <!-- various inputs with form submit --->

  <!-- button opens modal to show dynamic info -->
  <button id="myButton" class="btn btn-primary">Show Modal</button>
</form>

<div id="myModal" class="modal fade" ...>
</div>

<script>
  $( '#myButton' ).click( function() {
    $( '#myModal' ).modal();
  )};
</script>

正如@Bhargav 建议的那样,我的问题是由于按钮尝试提交表单并重新加载页面。我将按钮更改为<a>链接,如下所示:

<a href="#" id="myButton" class="btn btn-primary">Show Modal</a>

...它解决了这个问题。

注意:我还没有足够的声誉来简单地添加评论或投票,我觉得我可以添加一点澄清。

于 2015-03-18T18:51:22.613 回答
4

就我而言,单击按钮会导致(不需要)重新加载页面。

这是我的修复:

<button class="btn btn-success" onclick="javascript: return false;" 
data-target="#modalID" data-toggle="modal">deaktivieren</button>
于 2017-01-20T10:46:43.850 回答
3

就我而言,我只有一个 bootstrap.js, jquery.js 文件,但仍然出现这种类型的错误,我的按钮代码是这样的:

<script type="text/javascript">
$(document).ready(function(){
   $("#bttn_<?php echo $rnt['id'];?>").click(function(){
      $("#myModal_<?php echo $rnt['id'];?>").modal('show');
   });
});
</script>

我简单地添加了e.preventDefault(); 对它来说,它就像魅力一样。

所以,我的新代码如下:

<script type="text/javascript">
$(document).ready(function(){
  e.preventDefault();
  $("#bttn_<?php echo $rnt['id'];?>").click(function(){
     $("#myModal_<?php echo $rnt['id'];?>").modal('show');
  });
});
</script>
于 2015-06-17T08:20:03.223 回答
3

我今天自己遇到了这个问题,它恰好只在 Chrome 中。是什么让我意识到这可能是一个渲染问题。将特定模态移动到它自己的渲染层解决了它。

#myModal {
  -webkit-transform: translate3d(0, 0, 0);
}
于 2015-07-14T08:38:00.217 回答
3

在我的情况下,我actionlink在 MVC 中使用了按钮并且我遇到了这个问题,我已经尝试了很多上面和其他的解决方案,但仍然面临这个问题,然后我意识到我的代码错误。

我通过使用在 javascript 中调用了 modal

 $('#ModalId').modal('show');

在错误之前我使用这个按钮

<a href="" onclick="return Edit();" class="btn btn-primary">Edit</a>

我对这个按钮中的 href 属性没有任何价值,所以我面临这个问题。

然后我像这样编辑这个按钮代码

 <a href="#" onclick="return Edit();" class="btn btn-primary">Edit</a>

然后问题得到解决只是一个错误,因为第一个没有#。

看看这是否对你有帮助。

于 2017-02-22T13:27:20.677 回答
3

另一个原因/解决方案!我在我的 JS 代码中有:

$("#show_survey").click(function() {
  $("#survey_modal").modal("show")
})

但是我的 HTML 代码已经写成:

<a class="small-text link" data-target="#survey_modal" data-toggle="modal" href="#" id="show_survey">Take a quick 7 question survey!</a>

因此,这是重复如何进入代码并导致模式打开然后关闭的另一种排列方式。在我的情况下,data-target并且data-toggle根据 Bootstrap 文档在 html 中已经触发了模式工作。因此 JS 代码是多余的,当删除时,它可以工作。

于 2019-02-23T04:37:24.127 回答
1

我在使用 asp.NET 的项目中遇到了同样的问题。我正在使用 bootstrap 3.1.0 解决了它降级到 Bootstrap 2.3.2。

于 2014-05-19T01:20:36.400 回答
1

我也有这个问题,如果按钮在里面标记然后模态出现一次并很快消失,将按钮从表单中取出修复了问题。谢谢我最终进入了这个线程!对所有人 +1。

于 2014-11-11T10:48:24.950 回答
1

我在移动设备上进行测试时遇到了同样的问题,这个技巧对我有用

<a type="submit" class="btn btn-primary" data-toggle="modal" href="#myModal">Submit</a> 

将按钮更改为应该可以工作的锚标记,由于它的类型按钮在尝试提交时出现问题,因此模式立即消失。并且还从模式隐藏淡入中删除隐藏, <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> 希望这对你有用。

于 2015-03-04T12:47:21.270 回答
1

就我而言,我将 CDN 包含在 application.html.erb 的头部中,并且还安装了“jquery-rails”gem,由于上面的文档和帖子,我猜这是多余的。

我只是从 application.html.erb 的头部注释掉了 CDN(下),并且模态适当地保持打开状态。

<!--<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>-->
于 2015-05-11T22:03:07.977 回答
1

我也有同样的问题。我的问题是我在按下链接并提示使用 jquery 确认时显示模式。

下面的代码显示了模态并立即消失:

<a href="" onclick="do_some_stuff()">Hey</a>

我最终在 href 中添加了“#”,所以链接不会去任何地方,它解决了我的问题。

<a href="#" onclick="do_some_stuff()">Hey</a>
于 2016-04-28T15:56:04.773 回答
1

你试过删除

data-dismiss="modal"
于 2018-11-08T08:21:29.440 回答
0

我知道这很旧,但还有另一件事要检查 - 确保你只有一个 data-target= 属性。我已经复制了它,结果是按照这个线程。

于 2017-09-12T00:27:54.780 回答
0

我已经通过添加bootstrap到我的项目中bower,然后我导入了bootstrap.min.js文件并在modal.js文件之后。(打开模式的按钮位于表单内)。我只是删除了导入modal.js,它对我有用。

于 2018-01-28T17:20:54.547 回答
0

万一有人使用带有数据表的codeigniter 3引导程序。

下面是我在 config/ci_boostrap.php 中的修复

//'assets/dist/frontend/lib.min.js',
//lib.min.js has conflict with datatables.js and i removed it replace with jquery.js
'assets/dist/frontend/jquery-3.3.1.min.js',
'assets/dist/frontend/app.min.js',
'assets/dist/datatables.js'
于 2018-05-17T08:31:35.493 回答
0

不得不面对同样的问题。原因同上@merv。问题在于向页面添加了日历组件。组件本身添加了要在日历弹出窗口中使用的模式功能。

所以打破模型弹出的原因将是以下一项或多项

  • 加载多个引导 js 版本/文件(缩小...)
  • 将外部日历添加到使用引导程序的页面
  • 向页面添加自定义警报或弹出库
  • 添加弹出行为的任何其他库
于 2018-08-03T07:59:33.457 回答
0

在使用 Angular(5) 时,我遇到了同样的问题,但在我的情况下,我解决了如下问题:

组件.html

<button type="button" class="btn btn-primary"  data-target="#myModal" 
(click)="showresult()">fff</button>

<div class="modal" id="myModal" role="dialog"  tabindex="-1" data-backdrop="false">
    <div class="modal-dialog" role="document">
      <div class="modal-content">
        <div class="modal-header">
          <h5 class="modal-title">Modal title</h5>
          <button type="button" class="close" data-dismiss="modal" aria-label="Close">
            <span aria-hidden="true">&times;</span>
          </button>
        </div>
        <div class="modal-body">
          <p>Modal body text goes here.</p>
        </div>
        <div class="modal-footer">
          <button type="button" class="btn btn-primary">Save changes</button>
          <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
        </div>
      </div>
    </div>
  </div>

组件.ts

注意:需要将 ts 文件中的 jquery 导入为“declare var $:any;”

  showresult(){
    debugger
    $('#myModal').modal('show');
  }

我所做的更改:

  • 从 Button 标签中删除了“data-toggle="modal"(感谢@miCRoSCoPiC_eaRthLinG,这个答案在这里对我有帮助)在我的情况下它的显示模式,所以我创建了 (click)="showresult()"

  • 在component.ts里面需要声明Jquery($)和里面的按钮点击方法showresult()调用“$('#myModal').modal('show');”

于 2018-08-29T09:47:42.163 回答
0

我遇到了同样的问题,因为我切换了两次模态,如下所示:

statusCode: {
    410: function (request, status, error) { //custom error code

        document.getElementById('modalbody').innerHTML = error;
        $('#myErrorModal').modal('toggle')
    }
},
error: function (request, error) {

    document.getElementById('modalbody').innerHTML = error;
    $('#myErrorModal').modal('toggle')
}

我删除了一个事件:

$('#myErrorModal').modal('toggle')

它就像魔术一样工作!

于 2020-02-25T08:28:46.640 回答