Inicie el modo Bootstrap en la carga de la página

230

No sé javascript en absoluto. La documentación de bootstrap dice que

Llame al modal a través de javascript: $ ('# myModal'). Modal (opciones)

No tengo idea de cómo llamar a esto en una carga de página. Utilizando el código suministrado en la página de arranque, puedo llamar con éxito al modal con un clic de elemento, pero quiero que se cargue inmediatamente en una carga de página.

Brandon
fuente
3
Esta pregunta ha sido respondida muchas veces. utilice la función de búsqueda "ejecutar javascript al cargar la página".
rlemon
14
@rlemon: no necesariamente; la pregunta era estrictamente sobre el modo Bootstrap y no sobre la ejecución de funciones al cargar la página en general. El modo de arranque también se puede manipular a través de clases CSS, consulte una de las respuestas.
Miro
esto ayudará.simpler: w3schools.com/jsref/… con evento de
carga

Respuestas:

426

Simplemente envuelva el modal al que desea llamar en la carga de la página dentro de un loadevento jQuery en la sección principal de su documento y debería aparecer, de esta manera:

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>

Todavía puede llamar al modal dentro de su página con un enlace como este:

<a class="btn" data-toggle="modal" href="#myModal" >Launch Modal</a>
Andres Ilich
fuente
16
Esta respuesta es correcta. Una cosa a destacar es que esto no funcionará en absoluto en el evento ready documento: $(document).ready( ... . Eso sólo será posible en el evento de carga de ventana: $(window).load( ... .
racl101
55
Otra nota importante: muchas personas publican sus javascript incluidos al final del cuerpo. en cuyo caso, la función de carga debe incluirse al final, después de la inclusión.
Adam Joseph Looze
@ racl101 Es lo contrario para mí (han pasado 2 años desde su publicación, por lo que las cosas podrían haber cambiado). Solo funciona $(document).ready( ...cuando almaceno este script en un MVC PartialView para mi Modal que se agrega dinámicamente cuando un usuario hace clic en algo, así que tal vez es por eso. Irónicamente, su advertencia de lo que no debe hacer me permitió descubrir cómo hacer que funcione para mí. ¿Así que gracias? :)
MikeTeeVee
Hide no funcionó para mí (como clase), ya que bootstrap lo anuló y, por lo tanto, no mostraba nada. Se veía terrible (no como un modal) y tampoco se cerró cuando presionó el botón. La parte de JavaScript funcionó, pero sugeriría usar la parte html del modal que GAURAV MAHALE usó en su respuesta, pero tenga en cuenta que eliminará la palabra 'show' en la clase de su modal.
Malaquías
¡Solo incluya jQuery Library primero!
Ersks
84

No necesitas javascriptmostrar modal

La forma más simple es reemplazar "ocultar" por "en"

class="modal fade hide"

entonces

class="modal fade in"

y necesitas agregar onclick = "$('.modal').hide()"el botón cerrar;

PD: Creo que la mejor manera es agregar script jQuery:

$('.modal').modal('show');
usuario2545728
fuente
1
He probado este método pero tengo dos problemas. 1) el modal no se cerrará. 2) El fondo modal ha desaparecido. ¿Algunas ideas?
Nick Green
2
La solución jquery anterior funciona bien. Una línea de código hace el truco. @NickGreen Prueba esto: class = "modal fade". Elimina 'hide' y 'in'. Esto funciona en mi caso, pero aún no está en vivo, de lo contrario publicaría el enlace.
Randy Greencorn
39

Solo agregue lo siguiente:

class="modal show"

Ejemplo de trabajo

<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
fuente
10
Esta solución no funciona: el diálogo está permanentemente atascado en la parte superior de la página. Además, si usa la clase "fade" junto con "modal", el diálogo no aparecerá en absoluto.
Boris Burkov
77
Depende de qué escenario deba mostrarse el modal, en mi caso, quiero que el modal esté atascado permanentemente.
Profesor de programación
También se
1
¿Por qué tener botones de cierre si no hacen nada? ¿Hay alguna manera de hacer que esto funcione?
Ellen McCastle
1
@boris, agregue esto al botón de cierre modal:onclick = "$('.modal').removeClass('show').addClass('fade');"
Saw-mon y Natalie
21

Puedes probar este código ejecutable

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

Más se puede encontrar aquí .

Creo que tienes tu respuesta completa.

Abrar Jahin
fuente
Gracias por publicar los enlaces necesarios para la cabeza :)
DanielaB67
Para mí, este código fue el único que funcionó maravillosamente. Gracias.
Semmerket
7

con respecto a lo que dice Andre's Ilich, debe agregar el script js después de la línea en lo que llama 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>

en mi caso ese fue el problema espero que ayude

JPCS
fuente
5

En mi caso, agregar jQuery para mostrar el modal no funcionó:

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

Lo cual parecía ser porque el modal tenía el atributo aria-hidden = "true":

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

Se necesitaba eliminar ese atributo, así como el jQuery anterior:

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

Tenga en cuenta que intenté cambiar las clases modales de modal fadea modal fade in, y eso no funcionó. Además, cambiar las clases de modal fadea modal showevitó que el modal pudiera cerrarse.

Altamente irregular
fuente
5

Heres una solución [sin inicialización de JavaScript!]

No pude encontrar un ejemplo sin inicializar su modal con javascript, $('#myModal').modal('show')por lo que he aquí una sugerencia sobre cómo podría implementarlo sin retraso de javascript en la carga de la página.

  1. Edite su contenedor modal div con clase y estilo:

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

  1. Edita tu cuerpo con clase y estilo:

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

  2. Agregar modal-backdrop div

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

  3. Agregar guión

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

    Lo que sucederá es que el html para su modal se cargará en la carga de la página sin javascript (sin demora). En este punto, no puede cerrar el modal, por eso tenemos el script document.ready, para cargar el modal correctamente cuando todo está cargado. En realidad, eliminaremos el código personalizado y luego inicializaremos el modal, (nuevamente), con el .modal ('show').

Reft
fuente
Buena sugerencia. ¡Gracias!
RafaSashi
5

Puede activar el modal sin escribir ningún JavaScript simplemente a través de atributos de datos.

La opción "mostrar" establecida en verdadero muestra el modal cuando se inicializa:

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

Como otros han mencionado, cree su modal con display: block

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

Coloque el telón de fondo en cualquier lugar de su página, no necesariamente debe estar al final de la página

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

Luego, para poder cerrar el diálogo nuevamente, agregue esto

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

Espero que esto ayude

jBelanger
fuente
4

Probado con Bootstrap 3 y jQuery (2.2 y 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
fuente
1
@EduardoCuomo sí, funciona jsfiddle.net/bsmpLvz6 Este ejemplo se hizo usando Bootstrap 3.3 y 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>

Puede mostrarlo al inicio incluso sin Javascript. Simplemente elimine la clase "hide".

class="Modal"
SPIELER
fuente
3

Además de las respuestas user2545728 y Reft, sin javascript pero con elmodal-backdrop in

3 cosas para agregar

  1. un div con las clases modal-backdrop inanteriores a la clase .modal
  2. style="display:block;" a la clase .modal
  3. fade in junto con la clase .modal

Ejemplo

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

Actualización 2020 - Bootstrap 4

El marcado modal ha cambiado ligeramente para Bootstrap 4. Así es como puede abrir el modal en la carga de la página y, opcionalmente, retrasar la visualización del modal ...

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

Zim
fuente
Alternativamente, puede utilizar el atributo "data-show": getbootstrap.com/docs/4.5/components/modal/#via-data-attributes
Mike
2

En bootstrap 3 solo necesita inicializar el modal a través de js y si en el momento de la carga de la página el marcado modal está en la página, aparecerá el modal.

En caso de que quiera evitar esto, use la opción show: falsedonde inicializa el modal. Algo como esto: $('.modal').modal({ show: false })

Stafie Anatolie
fuente
0

Es posible que desee mantener jquery.jsdiferido para una carga de página más rápida. Sin embargo, si jquery.jsse difiere , es $(window).loadposible que no funcione. Entonces puedes intentar

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

aparecerá su modal después de que la página esté completamente cargada (incluido jquery)

Viktor Ka
fuente
3
Establecer un tiempo de espera para que el DOM esté listo es la mala práctica definitiva. ¿Qué sucede si el usuario tiene una conexión lenta? De lo que podría tomar 10 segundos ... Así que NUNCA haga esto
DutchKevv
0

Para evitar que se anule el bootstrap y se pierda su funcionalidad, simplemente cree un botón de inicio normal, proporciónelo con un Id y haga clic en él usando jquery, así: El botón de inicio:

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

El desencadenante jQuery:

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

Espero eso ayude. ¡Salud!

E. Barney
fuente
-1

Ejemplo simple Hacer un cargador de giro de un modal de arranque

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