在页面加载时启动Bootstrap Modal


230

我一点都不懂javascript。引导文档说

通过javascript调用模式:$('#myModal')。modal(options)

我不知道如何在页面加载时调用它。使用引导页面上提供的代码,我可以在元素单击时成功调用Modal,但是我希望它在页面加载时立即加载。



3
这个问题已经被回答了很多遍了。请使用搜索功能“在页面加载时运行javascript”。
rlemon

14
@rlemon-不一定;这个问题严格来说是关于Bootstrap模态的,而不是一般在页面加载时运行功能。Bootstrap模态也可以通过CSS类进行操作,请参阅答案之一。
米罗2014年

这将有所帮助。更简单:w3schools.com/jsref/…具有onload事件
user2290820 2015年

Answers:


426

只需将要在页面加载时调用的模式包装在load文档头部的jQuery 事件内,它就会弹出,如下所示:

JS

<script type="text/javascript">
    $(window).on('load',function(){
        $('#myModal').modal('show');
    });
</script>

的HTML

<div class="modal hide fade" id="myModal">
  <div class="modal-header">
    <a class="close" data-dismiss="modal">×</a>
    <h3>Modal header</h3>
  </div>
  <div class="modal-body">
    <p>One fine body…</p>
  </div>
  <div class="modal-footer">
    <a href="#" class="btn">Close</a>
    <a href="#" class="btn btn-primary">Save changes</a>
  </div>
</div>

您仍然可以通过以下链接来调用页面中的模式:

<a class="btn" data-toggle="modal" href="#myModal" >Launch Modal</a>

16
这个答案是正确的。需要注意的一件事是,这在文档准备事件中根本不起作用:$(document).ready( ... 。它仅适用于窗口加载事件:$(window).load( ...
racl101 2014年

5
另一个重要说明:很多人在正文末尾发布其javascript。在这种情况下,必须在包含之后在末尾包含onload函数。
亚当·约瑟夫·鲁兹

@ racl101对我来说正好相反(自您发布以来已经2年了,所以情况可能会有所变化)。仅$(document).ready( ...当我将此脚本存储在我的Modal的MVC PartialView中时,该脚本才起作用,当用户单击某些内容时会动态添加该脚本,所以也许就是这个原因。具有讽刺意味的是,您对采取行动的警告使我得以弄清楚如何使其对我有用。那谢谢啦?:)
MikeTeeVee 2016年

Hide对我(作为班级)不起作用,因为引导程序将其否决,因此不会显示任何内容。它看起来很糟糕(不像模态),当您按下按钮时它也没有关闭。javascript部分有效,但我建议使用GAURAV MAHALE在其答案中使用的模式的html部分,但请注意在其模式的类中删除单词“ show”。
玛拉基

只需先包含jQuery库!
ERSKS

84

您不需要javascript显示模态

最简单的方法是将“隐藏”替换为“中”

class="modal fade hide"

所以

class="modal fade in"

并且您需要添加onclick = "$('.modal').hide()"按钮关闭;

PS:我认为最好的方法是添加jQuery脚本:

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

1
我尝试过这种方法,但遇到两个问题。1)模态不会关闭。2)模态背景消失了。有任何想法吗?
尼克·格林

2
上面的jquery解决方案效果很好。一行代码就能解决问题。@NickGreen尝试一下:class =“ modal fade”。删除“隐藏”和“中”。就我而言,此方法有效,但尚未生效,否则我将发布链接。
兰迪·格林康

39

只需添加以下内容-

class="modal show"

工作示例

<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>

<div class="container">
  <!-- Trigger the modal with a button -->
  <button type="button" class="btn btn-info btn-lg" data-toggle="modal" data-target="#myModal">Open Modal</button>

  <!-- Modal -->
  <div class="modal show" id="myModal" role="dialog">
    <div class="modal-dialog">
    
      <!-- Modal content-->
      <div class="modal-content">
        <div class="modal-header">
          <button type="button" class="close" data-dismiss="modal">&times;</button>
          <h4 class="modal-title">Modal Header</h4>
        </div>
        <div class="modal-body">
          <p>Some text in the modal.</p>
        </div>
        <div class="modal-footer">
          <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
        </div>
      </div>
      
    </div>
  </div>
  
</div>


10
该解决方案不起作用:对话框永久停留在页面顶部。另外,如果将“ fade”类与“ modal”一起使用,则该对话框将根本不会出现。
鲍里斯·伯科夫

7
这取决于需要显示模态的情况,在我的情况下,我希望模态被永久卡住。
编程教授

也遇到了鲍勃的问题

1
如果他们什么都不做,为什么还要关闭按钮呢?有什么办法可以使它正常工作吗?
艾伦·麦卡斯特

1
@boris,将其添加到模式关闭按钮:onclick = "$('.modal').removeClass('show').addClass('fade');"
Saw-mon和Natalie

21

您可以尝试以下可运行的代码-

$(window).load(function()
{
    $('#myModal').modal('show');
});
<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>

<div class="container">
  <!-- Trigger the modal with a button -->
  <button type="button" class="btn btn-info btn-lg" data-toggle="modal" data-target="#myModal">Open Modal</button>

  <!-- Modal -->
  <div class="modal fade" id="myModal" role="dialog">
    <div class="modal-dialog">
    
      <!-- Modal content-->
      <div class="modal-content">
        <div class="modal-header">
          <button type="button" class="close" data-dismiss="modal">&times;</button>
          <h4 class="modal-title">Modal Header</h4>
        </div>
        <div class="modal-body">
          <p>Some text in the modal.</p>
        </div>
        <div class="modal-footer">
          <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
        </div>
      </div>
      
    </div>
  </div>
  
</div>

这里可以找到更多。

认为您有完整的答案。


感谢您发布头像所需的链接:)
DanielaB67

对我来说,这段代码是唯一运行得很好的代码。谢谢。
塞默特克

7

关于Andre的Ilich所说的内容,您必须在称为jquery的行之后添加js脚本:

<script src="content/bootstrapJS/jquery-2.1.1.min.js" type="text/javascript"></script>

<script type="text/javascript">
     $(window).load(function(){
         $('#myModal').modal('show');
      });
</script>

就我而言,这就是问题,希望对您有所帮助


5

在我的情况下,添加jQuery以显示模式不起作用:

$(document).ready(function() {
    $('#myModal').modal('show');
});

这似乎是因为该模态具有aria-hidden =“ true”属性:

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

需要删除该属性以及上面的jQuery:

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

请注意,我尝试将模式类从更改modal fademodal fade in,但这没有用。同样,将类从更改为modal fade可以modal show停止模态。


5

继承人的解决方案[无需进行JavaScript初始化!]

我无法找到一个例子,而不使用JavaScript初始化的模式,$('#myModal').modal('show'),所以继承人你如何能实现它没有一个建议的JavaScript延迟页面加载。

  1. 使用类和样式编辑模式容器div:

<div class="modal in" id="MyModal" tabindex="-1" role="dialog" style="display: block; padding-right: 17px;">

  1. 用类和样式编辑您的身体:

    <body class="modal-open" style="padding-right:17px;">

  2. 添加模态背景div

    <div class="modal-backdrop in"></div>

  3. 添加脚本

    $(document).ready(function() {
        $('body').css('padding-right', '0px');
        $('body').removeClass('modal-open');
        $('.modal-backdrop').remove();
    
        $('#MyModal').modal('show'); });

    将会发生的是,您的模式的html将在页面加载时加载而没有任何javascript(无延迟)。在这一点上,您无法关闭模式,这就是为什么我们拥有document.ready脚本,以便在加载所有内容后正确加载模式的原因。实际上,我们将删除自定义代码,然后使用.modal('show')再次初始化模式。


好建议。谢谢!
拉斐萨希(RofaSashi)

5

您可以仅通过数据属性激活模式而无需编写任何JavaScript。

设置为true的选项“ show”初始化时显示模态:

<div class="modal fade" tabindex="-1" role="dialog" data-show="true"></div>

4

就像其他人提到的那样,使用display:block创建模态

<div class="modal in" tabindex="-1" role="dialog" style="display:block">
...

将背景放置在页面上的任何位置,不一定需要将其放在页面底部

<div class="modal-backdrop fade show"></div> 

然后,要能够再次关闭对话框,请添加此

<script>
    $("button[data-dismiss=modal]").click(function () {
        $(".modal.in").removeClass("in").addClass("fade").hide();
        $(".modal-backdrop").remove();
    });
</script>

希望这可以帮助


4

经过Bootstrap 3和jQuery(2.2和2.3)的测试

$(window).on('load',function(){
  $('#myModal').modal('show');
});



<!-- Modal -->
<div class="modal fade" id="myModal" role="dialog">
    <div class="modal-dialog">

      <!-- Modal content-->
      <div class="modal-content">
        <div class="modal-header">
          <button type="button" class="close" data-dismiss="modal">&times;</button>
          <h4 class="modal-title"><i class="fa fa-exclamation-circle"></i>&nbsp; //Your modal Title</h4>
        </div>
        <div class="modal-body">
          //Your modal Content
        </div>
        <div class="modal-footer">
          <button type="button" class="btn btn-default" data-dismiss="modal">Fechar</button>
        </div>
      </div>

    </div>
</div>

https://jsfiddle.net/d7utnsbm/


1
@EduardoCuomo是的,它的工作原理是jsfiddle.net/bsmpLvz6 这个示例是使用Bootstrap 3.3和jQuery 2.2制作的
Felipe Lima

3
<div id="ModalStart" class="modal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-body">
          <p><i class="icon-spinner icon-spin icon-4x"></i></p>
    </div>
</div>

即使没有Java语言,也可以在开始时显示它。只需删除“隐藏”类。

class="Modal"

3

除了user2545728和Reft答案外,没有javascript,但带有modal-backdrop in

3件事要添加

  1. modal-backdrop in在.modal类之前的类的div
  2. style="display:block;" 到.modal类
  3. fade in 与.modal类一起

<div class="modal-backdrop in"></div>

<div class="modal fade in" tabindex="-1" role="dialog" aria-labelledby="channelModal" style="display:block;">

    <div class="modal-dialog modal-lg" role="document">

        <div class="modal-content">

            <div class="modal-header">

                <h4 class="modal-title" id="channelModal">Welcome!</h4>

            </div>

            <div class="modal-body" style="height:350px;">

                How did you find us?

            </div>

        </div>

    </div>

</div>

3

更新2020-Bootstrap 4

Bootstrap 4的模式标记已稍有更改。这是您可以在页面加载时打开模式的方式,并且可以选择延迟显示模式...

$(window).on('load',function(){
    var delayMs = 1500; // delay in milliseconds

    setTimeout(function(){
        $('#myModal').modal('show');
    }, delayMs);
});    

<div class="modal fade" id="myModal">
      <div class="modal-dialog modal-lg modal-dialog-centered" role="document">
            <div class="modal-content">
                <div class="modal-header">
                    <h4 class="modal-title">My Modal</h4>
                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                        <span aria-hidden="true">×</span>
                    </button>
                </div>
                <div class="modal-body">
                    ...
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-secondary mx-auto" data-dismiss="modal">Close</button>
                </div>
            </div>
      </div>
</div>

Codeply上的演示


或者,您可以使用“数据显示”属性:getbootstrap.com/docs/4.5/components/modal/#via-data-attributes
Mike

2

在bootstrap 3中,您只需要通过js初始化模态,如果在页面加载时模态标记位于页面中,则模态将显示。

如果要防止这种情况,请show: false在初始化模态时使用该选项。像这样: $('.modal').modal({ show: false })


0

您可能需要jquery.js推迟以加快页面加载速度。但是,如果jquery.js推迟,则$(window).load可能无法正常工作。那你可以试试

setTimeout(function(){$('#myModal').modal('show');},3000);

页面完全加载后(包括jquery),它将弹出您的模态


3
设置DOM就绪的超时是最终的坏习惯。如果用户连接速度慢怎么办?可能要花10秒。.所以永远不要这样做
DutchKevv

0

为了避免引导程序被否决并失去其功能,只需创建一个常规的启动按钮,为其提供一个ID,然后使用jquery'单击它',如下所示:启动按钮:

<button type="button" id="btnAnouncement" class="btn btn-primary" data-toggle="modal" data-target="#modalAnouncement">
  See what´s new!
</button>

jQuery触发器:

$(document).ready(function () {
  $('#btnAnouncement').click();
)}

希望能帮助到你。干杯!


-1

简单示例使引导程序模式的装载程序微调器

<!DOCTYPE html>
<html lang="en">
<head>
  <title>Bootstrap Example</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
  <script>
  $(document).ready(function(){
  $('#myModal').modal('show'); 
  setTimeout(function(){
  $('#myModal').modal('hide'); 
  }, 5000);
   });
  </script>
  <style>
.loader {
  border: 13px solid #f3f3f3;
  border-radius: 50%;
  border-top: 16px solid #3498db;
  width: 100px;
  height: 100px;
  -webkit-animation: spin 2s linear infinite; /* Safari */
  animation: spin 2s linear infinite;
}

/* Safari */
@-webkit-keyframes spin {
  0% { -webkit-transform: rotate(0deg); }
  100% { -webkit-transform: rotate(360deg); }
}

@keyframes spin {
  0% { transform: rotate(0deg); }
  100% { transform: rotate(360deg); }
}
.modal-dialog{
width: 150px;
    margin: 10% auto;
}
.modal-content{
background-color: transparent; 
   border: 0;
    border-radius: 0;
    outline: 0;
    box-shadow: none;
}
</style>
</head>
<body>

<div class="container">

  <!-- Modal -->
  <div class="modal fade" data-backdrop="static" id="myModal" role="dialog">
    <div class="modal-dialog">

      <!-- Modal content-->
      <div class="modal-content">

        <div class="modal-body">
         <div class="loader"></div>
        </div>

      </div>

    </div>
  </div>

</div>

</body>
</html>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.