Uruchom moduł ładujący po załadowaniu strony

230

W ogóle nie znam javascript. Dokumentacja bootstrap mówi o tym

Wywołaj modal przez javascript: $ ('# myModal'). Modal (opcje)

Nie mam pojęcia, jak to nazwać przy ładowaniu strony. Za pomocą dostarczonego kodu na stronie ładowania początkowego mogę z powodzeniem wywołać Modal po kliknięciu elementu, ale chcę, aby ładował się natychmiast po załadowaniu strony.

Brandon
źródło
możliwy duplikat funkcji uruchamiania Javascript po
wczytaniu
3
Odpowiedź na to pytanie była wielokrotnie. użyj funkcji wyszukiwania „uruchom javascript przy ładowaniu strony”.
rlemon
14
@rlemon - niekoniecznie; pytanie dotyczyło wyłącznie modalności Bootstrap i ogólnego braku uruchamiania funkcji po wczytaniu strony. Modalem bootstrap można również manipulować za pomocą klas CSS, patrz jedna z odpowiedzi.
Miro
to pomoże.simpler: w3schools.com/jsref/… ze zdarzeniem onload
user2290820

Odpowiedzi:

426

Po prostu zawiń modal, który chcesz wywołać podczas ładowania strony, w loadzdarzeniu jQuery w sekcji head twojego dokumentu i powinien on się wyskoczyć, tak jak:

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>

Nadal możesz wywoływać modal na swojej stronie, wywołując go za pomocą linku:

<a class="btn" data-toggle="modal" href="#myModal" >Launch Modal</a>
Andres Ilich
źródło
16
Ta odpowiedź jest poprawna. Należy zwrócić uwagę jest to, że to nie działa w ogóle na razie gotowy dokument: $(document).ready( ... . Będzie działać tylko w przypadku obciążenia okno: $(window).load( ... .
racl101,
5
Kolejna ważna uwaga: wiele osób zamieszcza swój kod javascript na końcu ciała. w takim przypadku funkcja onload musi być dołączona na końcu, po włączeniu.
Adam Joseph Looze
@ racl101 Dla mnie jest odwrotnie (minęły 2 lata od twojego postu, więc mogło się to zmienić). Działa tylko $(document).ready( ...wtedy, gdy przechowuję ten skrypt w MVC PartialView dla mojego Modalu, który jest dynamicznie dodawany, gdy użytkownik coś kliknie, więc może dlatego. Jak na ironię, twoje ostrzeżenie o tym, czego nie robić, pozwoliło mi wymyślić, jak to zrobić dla mnie. Więc dziękuję? :)
MikeTeeVee,
Hide nie działało dla mnie (jako klasy), ponieważ bootstrap go unieważnił i dlatego nic nie pokazywał. Wyglądał okropnie (nie jak modal) i nie zamknął się również po naciśnięciu przycisku. Część javascript działała, ale sugerowałbym użycie części html modalu, którego GAURAV MAHALE użył w swojej odpowiedzi, ale pamiętaj, aby usunąć słowo „show” w klasie jego modalu.
Malachiasz
Najpierw dołącz bibliotekę jQuery!
ersks
84

Nie musisz javascriptpokazywać modalności

Najprostszym sposobem jest zastąpienie słowa „ukryj” słowem „w”

class="modal fade hide"

więc

class="modal fade in"

i musisz dodać onclick = "$('.modal').hide()"przycisk zamykania;

PS: Myślę, że najlepszym sposobem jest dodanie skryptu jQuery:

$('.modal').modal('show');
użytkownik2545728
źródło
1
Próbowałem tej metody, ale mam dwa problemy. 1) modal nie chce się zamknąć. 2) Tło modalne zniknęło. Jakieś pomysły?
Nick Green
2
Powyższe rozwiązanie jquery działa dobrze. Jedna linia kodu załatwia sprawę. @NickGreen Wypróbuj to: class = "modal fade". Usuń „ukryj” i „w”. Działa to w moim przypadku, ale nie jest jeszcze dostępne, w przeciwnym razie opublikowałbym link.
Randy Greencorn,
39

Po prostu dodaj następujące-

class="modal show"

Przykład roboczy

<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>

GAURAV MAHALE
źródło
10
To rozwiązanie nie działa: okno dialogowe jest trwale zablokowane na górze strony. Ponadto, jeśli użyjesz klasy „fade” wraz z „modal”, okno dialogowe w ogóle się nie pojawi.
Boris Burkov,
7
Zależy to od tego, jaki scenariusz powinien zostać wyświetlony, w moim przypadku chcę, aby modal został na stałe zablokowany.
Profesor programowania
1
Po co mieć zamknięte przyciski, jeśli nic nie zrobią? Czy jest jakiś sposób, żeby to zadziałało?
Ellen McCastle
1
@boris, dodaj to do modalnego przycisku zamykania:onclick = "$('.modal').removeClass('show').addClass('fade');"
Saw-mon i Natalie
21

Możesz spróbować uruchomić ten kod

$(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>

Więcej można znaleźć tutaj .

Myślę, że masz pełną odpowiedź.

Abrar Jahin
źródło
Dzięki za opublikowanie linków niezbędnych do głowy :)
DanielaB67
Dla mnie ten kod był jedynym, który działał pięknie. Dzięki.
Semmerket
7

odnośnie tego, co Andre Ilich mówi, musisz dodać skrypt js po wierszu w tak zwanej 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>

w moim przypadku to był problem, mam nadzieję, że to pomoże

JPCS
źródło
5

W moim przypadku dodanie jQuery w celu wyświetlenia modalu nie działało:

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

Co zdawało się, ponieważ modal miał atrybut aria-hidden = "true":

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

Konieczne było usunięcie tego atrybutu, a także powyższego jQuery:

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

Zauważ, że próbowałem zmienić klasy modalne z modal fadena modal fade ini to nie działało. Również zmiana klas z modal fadena modal showpowstrzymała modal od możliwości zamknięcia.

Wysoce nieregularne
źródło
5

Oto rozwiązanie [bez inicjacji javascript!]

Nie mogłem znaleźć przykładu bez zainicjowania modalu za pomocą javascript, $('#myModal').modal('show')więc oto sugestia, w jaki sposób można go wdrożyć bez opóźnienia javascript przy ładowaniu strony.

  1. Edytuj swój modalny div kontener z klasą i stylem:

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

  1. Edytuj swoje ciało w klasie i stylu:

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

  2. Dodaj modal-div div

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

  3. Dodaj skrypt

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

    Stanie się tak, że HTML dla twojego modalu zostanie załadowany przy ładowaniu strony bez javascript, (bez opóźnienia). W tym momencie nie możesz zamknąć modalu, dlatego mamy skrypt document.ready, aby poprawnie załadować modal, gdy wszystko jest załadowane. Właściwie usuniemy kod niestandardowy, a następnie zainicjalizujemy modal (ponownie) za pomocą .modal („pokaż”).

Reft
źródło
Dobry pomysł. Dzięki!
RafaSashi
5

Możesz aktywować modal bez pisania kodu JavaScript po prostu za pomocą atrybutów danych.

Opcja „pokaż” ustawiona na true pokazuje modalność podczas inicjalizacji:

<div class="modal fade" tabindex="-1" role="dialog" data-show="true"></div>
obiTheOne
źródło
4

Jak wspomnieli inni, stwórz swój modal z display: block

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

Umieść tło w dowolnym miejscu na stronie, niekoniecznie musi znajdować się na dole strony

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

Następnie, aby móc ponownie zamknąć okno dialogowe, dodaj to

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

Mam nadzieję że to pomoże

jBelanger
źródło
4

Testowane z Bootstrap 3 i jQuery (2.2 i 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/

Felipe Lima
źródło
1
@EduardoCuomo tak, działa jsfiddle.net/bsmpLvz6 Ten przykład został wykonany przy użyciu Bootstrap 3.3 i 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>

Możesz pokazać go na starcie, nawet bez Javascript. Wystarczy usunąć klasę „ukryj”.

class="Modal"
SPIELER
źródło
3

Oprócz odpowiedzi user2545728 i Reft, bez javascript, ale zmodal-backdrop in

3 rzeczy do dodania

  1. div z klasami modal-backdrop inprzed klasą .modal
  2. style="display:block;" do klasy .modal
  3. fade in wraz z klasą .modal

Przykład

<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>
RafaSashi
źródło
3

Aktualizacja 2020 - Bootstrap 4

Znacznik modalny nieznacznie się zmienił dla Bootstrap 4. Oto jak możesz otworzyć modal przy ładowaniu strony i opcjonalnie opóźnić wyświetlanie modalu ...

$(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>

Demo na Codeply

Zim
źródło
Alternatywnie możesz użyć atrybutu „data-show”: getbootstrap.com/docs/4.5/components/modal/#via-data-attributes
Mike
2

W bootstrap 3 wystarczy zainicjować modal poprzez js, a jeśli w momencie ładowania strony znacznik modalny znajduje się na stronie, modal się pojawi.

Jeśli chcesz temu zapobiec, skorzystaj z opcji show: falseinicjalizacji modalu. Coś takiego: $('.modal').modal({ show: false })

Stafie Anatolie
źródło
0

Możesz jquery.jsodłożyć na później, aby przyspieszyć ładowanie strony. Jeśli jednak jquery.jszostanie odroczony, $(window).loadmoże nie działać. Więc możesz spróbować

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

wyskakuje twój modal po całkowitym załadowaniu strony (w tym jquery)

Viktor Ka
źródło
3
Ustawienie limitu czasu dla DOM jest gotowy do złej praktyki. Co zrobić, jeśli użytkownik ma wolne połączenie? Niż może to zająć 10 sekund. Nigdy nie rób tego nigdy
DutchKevv
0

Aby uniknąć zastąpienia bootstrapu i utraty jego funkcjonalności, po prostu stwórz zwykły przycisk uruchamiania, podaj identyfikator i „klikaj” za pomocą jquery, podobnie jak: przycisk uruchamiania:

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

Wyzwalacz jQuery:

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

Mam nadzieję, że to pomoże. Twoje zdrowie!

E. Barney
źródło
-1

Prosty przykład Stwórz moduł ładujący z modalu bootstrap

<!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>
ankush
źródło