Starten Sie Bootstrap Modal beim Laden der Seite

230

Ich kenne Javascript überhaupt nicht. Die Bootstrap-Dokumentation sagt zu

Rufen Sie das Modal über Javascript auf: $ ('# myModal'). Modal (Optionen)

Ich habe keine Ahnung, wie ich das beim Laden einer Seite aufrufen soll. Mit dem auf der Bootstrap-Seite angegebenen Code kann ich das Modal bei einem Elementklick erfolgreich aufrufen, möchte aber, dass es beim Laden einer Seite sofort geladen wird.

Brandon
quelle
Mögliches Duplikat der Javascript-
rlemon
3
Diese Frage wurde mehrfach beantwortet. Bitte benutzen Sie die Suchfunktion "Javascript beim Laden der Seite ausführen".
Rlemon
14
@rlemon - Nicht unbedingt; Die Frage bezog sich ausschließlich auf das Bootstrap-Modal und darauf, dass beim Laden der Seite im Allgemeinen keine Funktionen ausgeführt werden. Das Bootstrap-Modal kann auch über CSS-Klassen bearbeitet werden, siehe eine der Antworten.
Miro
Dies wird helfen. Einfacher: w3schools.com/jsref/… mit Onload-Ereignis
user2290820

Antworten:

426

Schließen Sie einfach das Modal, das Sie beim Laden der Seite aufrufen möchten, in ein jQuery- loadEreignis im Kopfbereich Ihres Dokuments ein, und es sollte wie folgt angezeigt werden:

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>

Sie können das Modal innerhalb Ihrer Seite weiterhin mit aufrufen, indem Sie es mit einem Link wie folgt aufrufen:

<a class="btn" data-toggle="modal" href="#myModal" >Launch Modal</a>
Andres Ilich
quelle
16
Diese Antwort ist richtig. Eine Sache zu beachten ist, dass dies bei dem Dokument Ready-Ereignis überhaupt nicht funktioniert : $(document).ready( ... . Es funktioniert nur beim Fensterladeereignis : $(window).load( ... .
racl101
5
Ein weiterer wichtiger Hinweis: Viele Leute veröffentlichen ihre Javascript-Includes am Ende des Körpers. In diesem Fall muss die Onload-Funktion am Ende nach den Includes enthalten sein.
Adam Joseph Looze
@ racl101 Für mich ist es das Gegenteil (seit deinem Beitrag sind 2 Jahre vergangen, also haben sich die Dinge möglicherweise geändert). Es funktioniert nur mit$(document).ready( ... wenn ich dieses Skript in einer MVC PartialView für mein Modal speichere, die dynamisch hinzugefügt wird, wenn ein Benutzer auf etwas klickt. Vielleicht ist das der Grund. Ironischerweise erlaubte mir Ihre Warnung, was ich nicht tun sollte, herauszufinden, wie ich es für mich arbeiten lassen kann. So danke? :)
MikeTeeVee
Hide hat bei mir (als Klasse) nicht funktioniert, da Bootstrap es außer Kraft gesetzt hat und daher nichts zeigt. Es sah schrecklich aus (nicht wie ein Modal) und schloss auch nicht, wenn Sie den Knopf drückten. Der Javascript-Teil hat funktioniert, aber ich würde vorschlagen, den HTML-Teil des Modals zu verwenden, den GAURAV MAHALE in seiner Antwort verwendet hat, aber beachten Sie, dass das Wort 'show' in der Klasse seines Modals entfernt wird.
Malachi
Fügen Sie einfach zuerst die jQuery-Bibliothek hinzu!
ersks
84

Du brauchst nicht javascript modal zeigen

Der einfachste Weg ist, "verstecken" durch "in" zu ersetzen.

class="modal fade hide"

so

class="modal fade in"

und du musst hinzufügen onclick = "$('.modal').hide()" Schaltfläche zum .

PS: Ich denke, der beste Weg ist, ein jQuery-Skript hinzuzufügen:

$('.modal').modal('show');
user2545728
quelle
1
Ich habe diese Methode ausprobiert, bekomme aber zwei Probleme. 1) Das Modal wird nicht geschlossen. 2) Der modale Hintergrund ist verschwunden. Irgendwelche Ideen?
Nick Green
2
Die obige jquery-Lösung funktioniert gut. Eine Codezeile macht den Trick. @NickGreen Probieren Sie es aus: class = "modal fade". Entfernen Sie 'hide' und 'in'. Dies funktioniert in meinem Fall, aber es ist noch nicht live, sonst würde ich den Link posten.
Randy Greencorn
39

Fügen Sie einfach Folgendes hinzu:

class="modal show"

Arbeitsbeispiel-

<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
quelle
10
Diese Lösung funktioniert nicht: Der Dialog bleibt permanent oben auf der Seite hängen. Wenn Sie die Klasse "Fade" zusammen mit "Modal" verwenden, wird der Dialog überhaupt nicht angezeigt.
Boris Burkov
7
Es hängt davon ab, in welchem ​​Szenario das Modal angezeigt werden muss. In meinem Fall möchte ich, dass das Modal dauerhaft hängen bleibt.
Professor für Programmierung
Auch Bob's Problem
1
Warum schließen Sie Schaltflächen, wenn sie nichts tun? Gibt es eine Möglichkeit, dies zum Laufen zu bringen?
Ellen McCastle
1
@boris, füge dies dem modalen Schließen-Button hinzu:onclick = "$('.modal').removeClass('show').addClass('fade');"
Saw-mon und Natalie
21

Sie können diesen ausführbaren Code ausprobieren.

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

Mehr finden Sie hier .

Denken Sie, Sie haben Ihre vollständige Antwort.

Abrar Jahin
quelle
Vielen Dank für die Veröffentlichung der für den Kopf notwendigen Links :)
DanielaB67
Für mich war dieser Code der einzige, der wunderbar lief. Vielen Dank.
Semmerket
7

In Bezug auf das, was Andre's Ilich sagt, müssen Sie das js-Skript nach der Zeile in der so genannten jquery hinzufügen:

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

In meinem Fall war das das Problem, hoffe es hilft

JPCS
quelle
5

In meinem Fall hat das Hinzufügen von jQuery zur Anzeige des Modals nicht funktioniert:

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

Das schien daran zu liegen, dass das Modal das Attribut aria-hidden = "true" hatte:

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

Das Entfernen dieses Attributs sowie der obigen jQuery war erforderlich:

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

Beachten Sie, dass ich versucht habe, die Modalklassen von auf modal fadezu ändern modal fade in, und das hat nicht funktioniert. Durch das Ändern der Klassen von modal fadein wurde verhindert modal show, dass das Modal geschlossen werden kann.

Sehr unregelmäßig
quelle
5

Hier ist eine Lösung [ohne Javascript-Initialisierung!]

Ich konnte kein Beispiel finden, ohne Ihr Modal mit Javascript zu initialisieren. Hier ist $('#myModal').modal('show')ein Vorschlag, wie Sie es ohne Javascript-Verzögerung beim Laden der Seite implementieren können.

  1. Bearbeiten Sie Ihr modales Container-Div mit Klasse und Stil:

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

  1. Bearbeiten Sie Ihren Körper mit Klasse und Stil:

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

  2. Modal-Hintergrund div hinzufügen

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

  3. Skript hinzufügen

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

    Was passieren wird, ist, dass das HTML für Ihr Modal beim Laden der Seite ohne Javascript geladen wird (keine Verzögerung). Zu diesem Zeitpunkt können Sie das Modal nicht schließen. Aus diesem Grund haben wir das Skript document.ready, um das Modal ordnungsgemäß zu laden, wenn alles geladen ist. Wir werden den benutzerdefinierten Code tatsächlich entfernen und dann das Modal (erneut) mit dem .modal ('show') initialisieren.

Reft
quelle
Guter Vorschlag. Vielen Dank!
RafaSashi
5

Sie können das Modal aktivieren, ohne JavaScript einfach über Datenattribute zu schreiben.

Die auf "true" gesetzte Option "show" zeigt das Modal bei der Initialisierung an:

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

Wie andere bereits erwähnt haben, erstellen Sie Ihr Modal mit display: block

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

Platzieren Sie den Hintergrund an einer beliebigen Stelle auf Ihrer Seite. Er muss sich nicht unbedingt am unteren Rand der Seite befinden

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

Fügen Sie dies hinzu, um den Dialog wieder schließen zu können

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

Hoffe das hilft

jBelanger
quelle
4

Getestet mit Bootstrap 3 und jQuery (2.2 und 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
quelle
1
@EduardoCuomo ja, es funktioniert jsfiddle.net/bsmpLvz6 Dieses Beispiel wurde mit Bootstrap 3.3 und 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>

Sie können es beim Start auch ohne Javascript anzeigen. Löschen Sie einfach die Klasse "verstecken".

class="Modal"
SPIELER
quelle
3

Zusätzlich zu den Antworten von user2545728 und Reft, ohne Javascript, aber mit demmodal-backdrop in

3 Dinge hinzuzufügen

  1. ein div mit den Klassen modal-backdrop invor der .modal-Klasse
  2. style="display:block;" zur .modal Klasse
  3. fade in zusammen mit der .modal Klasse

Beispiel

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

Update 2020 - Bootstrap 4

Das Modal-Markup hat sich für Bootstrap 4 geringfügig geändert. So können Sie das Modal beim Laden der Seite öffnen und optional die Anzeige des Modals verzögern ...

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

Zim
quelle
Alternativ können Sie das Attribut "data-show" verwenden: getbootstrap.com/docs/4.5/components/modal/#via-data-attributes
Mike
2

In Bootstrap 3 müssen Sie nur das Modal über js initialisieren. Wenn sich im Moment des Seitenladens das Modal-Markup auf der Seite befindet, wird das Modal angezeigt.

Wenn Sie dies verhindern möchten, verwenden Sie die Option, mit der show: falseSie das Modal initialisieren. Etwas wie das: $('.modal').modal({ show: false })

Stafie Anatolie
quelle
0

Möglicherweise möchten Sie jquery.jsfür ein schnelleres Laden der Seite zurückgestellt bleiben . Wenn dies jquery.jsjedoch verschoben wird, $(window).loadfunktioniert dies möglicherweise nicht. Dann können Sie es versuchen

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

Es wird Ihr Modal angezeigt, nachdem die Seite vollständig geladen wurde (einschließlich jquery).

Viktor Ka
quelle
3
Das Festlegen einer Zeitüberschreitung für die Bereitschaft des DOM ist die ultimative schlechte Vorgehensweise. Was ist, wenn der Benutzer eine langsame Verbindung hat?
Dann
0

Um zu vermeiden, dass der Bootstrap übersteuert wird und seine Funktionalität verliert, erstellen Sie einfach eine reguläre Startschaltfläche, geben Sie ihm eine ID und klicken Sie mit jquery darauf, wie folgt: Die Startschaltfläche:

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

Der jQuery-Trigger:

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

Ich hoffe es hilft. Prost!

E. Barney
quelle
-1

Einfaches Beispiel Machen Sie einen Loader-Spinner aus einem Bootstrap-Modal

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