Запустите Bootstrap Modal при загрузке страницы


230

Я вообще не знаю JavaScript. Документация по начальной загрузке говорит

Вызвать модальное через javascript: $ ('# myModal'). Модальное (опции)

Я понятия не имею, как это назвать при загрузке страницы. Используя предоставленный код на странице начальной загрузки, я могу успешно вызывать Modal по щелчку элемента, но я хочу, чтобы он загружался немедленно при загрузке страницы.


возможный дубликат функции запуска Javascript после загрузки страницы
rlemon

3
На этот вопрос ответили много раз. Пожалуйста, используйте функцию поиска "запустить JavaScript при загрузке страницы".
rlemon

14
@rlemon - не обязательно; вопрос был строго о модальности Bootstrap и о неработающих функциях при загрузке страницы в целом. Модальностью начальной загрузки также можно управлять с помощью CSS-классов, см. Один из ответов.
Миро

это поможет.simpler: w3schools.com/jsref/… с событием onload
user2290820

Ответы:


426

Просто оберните модал, который вы хотите вызвать при загрузке страницы, в loadсобытие jQuery в секции head вашего документа, и оно должно появиться, например, так:

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

5
Еще одно важное замечание: многие люди публикуют свои javascript в конце тела. в этом случае функция onload должна быть включена в конце, после включения.
Адам Джозеф Лузе

@ racl101 Для меня все наоборот (прошло два года с твоего поста, поэтому все могло измениться). Он работает только $(document).ready( ...тогда, когда я сохраняю этот скрипт в MVC PartialView для моего модального окна, который динамически добавляется, когда пользователь нажимает на что-то, поэтому, возможно, именно поэтому. По иронии судьбы, ваше предупреждение о том, что не следует делать, позволило мне понять, как заставить это работать на меня. Так что спасибо? :)
MikeTeeVee

Hide не работал для меня (как класс), так как начальная загрузка отменила его и поэтому ничего не показала. Это выглядело ужасно (не как модал) и не закрывалось при нажатии кнопки. Часть javascript работала, но я бы предложил использовать html-часть модала, которую GAURAV MAHALE использовал в своем ответе, но обратите внимание, чтобы удалить слово «show» в классе его модала.
Малахи

Просто включите JQuery Library в первую очередь!
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 = "модальное затухание". Удалить «спрятать» и «в». Это работает в моем случае, но пока не работает, иначе я бы опубликовал ссылку.
Рэнди Гринкорн

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's Ilich, вы должны добавить скрипт js после строки в том, что вы называете jquery:

<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 fadeна modal fade in, и это не сработало. Кроме того, изменение классов с modal fadeна modal showпомешало модальному быть закрытым.


5

Вот решение [без инициализации JavaScript!]

Я не смог найти пример, не инициализировав ваш модал с помощью javascript, $('#myModal').modal('show')поэтому вот предложение о том, как вы могли бы реализовать его без задержки javascript при загрузке страницы.

  1. Отредактируйте ваш модальный контейнерный контейнер с классом и стилем:

<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 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').


Хорошее предложение. Спасибо!
RafaSashi

5

Вы можете активировать модальный режим без написания JavaScript просто через атрибуты данных.

Опция "show", установленная в true, показывает модальное состояние при инициализации:

<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
Фелипе Лима,

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>

Вы можете показать это на старте даже без Javascript. Просто удалите класс «скрыть».

class="Modal"

3

В дополнение к user2545728 и ответам Reft, без javascript, но сmodal-backdrop in

3 вещи, чтобы добавить

  1. div с классами modal-backdrop inперед классом .modal
  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


Кроме того, вы можете использовать атрибут «data-show»: getbootstrap.com/docs/4.5/components/modal/#via-data-attributes
Майк

2

В начальной загрузке 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>
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.