Cerrar Bootstrap Modal

432

Tengo un cuadro de diálogo modal de bootstrap que quiero mostrar inicialmente, luego, cuando el usuario hace clic en la página, desaparece. Tengo lo siguiente:

$(function () {
   $('#modal').modal(toggle)
});

 <div class="modal" id='modal'>
     <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
        <h3 id="myModalLabel">Error:</h3>
        </div>
        <div class="modal-body">
        <p>Please correct the following errors:</p>
        </div>
     </div>
 </div>

El modal se muestra inicialmente, pero no se cierra cuando se hace clic fuera del modal. Además, el área de contenido no está atenuada. ¿Cómo puedo hacer que el modal se muestre inicialmente y luego cerrar después de que el usuario haga clic fuera del área? ¿Y cómo puedo hacer que el fondo se atenúe como en la demostración?

Nick B
fuente
¿Estás inicializando tu modal con $("#yourModal").modal()o $('.modal').modal()?
merv
Se agregó más contexto arriba. Gracias por cualquier idea @merv!
Nick B
Sí ... eso mostró el problema. @Tamil tiene tu solución.
merv

Respuestas:

706

Poner en modal('toggle')lugar demodal(toggle)

$(function () {
   $('#modal').modal('toggle');
});
Tamil Selvan C
fuente
55
Incluyendo el 'alternar' en absoluto es superflous. Solo asegúrese de no tener una clase 'hide' en el div modal. Pero sí, el error tipográfico estaba causando el problema. entonces +1
merv
22
no, no funciona según lo previsto, oculta el elemento modal pero el elemento de superposición de fondo todavía existe, debe usar la solución @Subodth.
Parik Tiwari
1
@Pierre: considera eliminar tu comentario, .modal (). Hide () no es lo mismo que .modal ('hide'), vas a confundir a las personas.
Michael Peterson
2
Como dijo Parik, la respuesta correcta es usar modal ('ocultar')
MidouCloud
Esta NO es la respuesta correcta, ¡verifique la respuesta a continuación!
user1467439
412

a cerca de arranque modal puede pasar 'ocultar' como opción de método modal de la siguiente

$('#modal').modal('hide');

Por favor, eche un vistazo al violín de trabajo aquí

bootstrap también proporciona eventos que puede conectar a la funcionalidad modal , como si desea activar un evento cuando el modal ha terminado de ocultarse para el usuario, puede usar el evento hidden.bs.modal , puede leer más sobre métodos modales y eventos aquí en Documentación

Si ninguno de los métodos anteriores funciona, asigne una identificación a su botón de cerrar y haga clic en el botón de cerrar.

Subodh Ghulaxe
fuente
44
$ ('# modal'). modal ('alternar'); mejor para ocultar sombra modal
hamzeh.hanandeh
55
@ hamzeh.hanandeh, togglemantiene la superposición y no es una solución. Siempre debe usar cualquiera showo hide.
ryanpcmcquen
81
$('#modal').modal('toggle'); 

o

$('#modal').modal().hide();

Deberia trabajar.

Pero si nada más funciona, puede llamar al botón de cierre modal directamente:

$("#modal .close").click()
Robert Benyi
fuente
10
el que tiene hide () cierra el modal pero deja el fondo borroso. $ ("# modal .close"). click () lo hace perfectamente. ¡Gracias!
Shilpa
44
Esto ya está claramente documentado, aquí no hay necesidad de falsificar un clic, eso parece bastante extraño. La respuesta correcta es: $ ('# modal'). Modal ('hide');
Michael Peterson
esto -> $ ('# modal'). modal (). hide ();
TARA
Tengo un modelo que no cierra, $('#modal').modal('hide')pero puedo cerrarlo usando $('#modal').modal('toggle')pero que muestra una barra de desplazamiento vertical después del cierre. Entonces, para mí $('#modal').hide()funcionó perfectamente, pero quiero saber si eso crearía algún problema. Y estoy codificando dentro, $('#modal .close').click()así que no creo que pueda usarlo para cerrar modal.
Ahtisham el
34

esto funcionó para mí:

<span class="button" data-dismiss="modal" aria-label="Close">cancel</span>

usa este enlace modal cerrar

santhosh
fuente
20
$("#your-modal-id").modal('hide');

Ejecutar esta llamada a través de la clase ($(".my-modal"))no funcionará.

Yishai Landau
fuente
18

Prueba esto

$('#modal_id').modal('hide');
Amor kumar
fuente
3
Creo que esto proporciona una respuesta a la pregunta.
jkdev
1
Estoy de acuerdo. Esta respuesta es más precisa a la pregunta.
mikeyq6
1
Esta es una mejor respuesta que la más votada.
Marcelo Agimóvel
@ MarceloAgimóvel :-)
Love Kumar
10

este es bastante bueno y también funciona en angular 2

$("#modal .close").click()
usuario3869304
fuente
Funciona para mí en lugar de $('#modal').modal('toggle');que no tiene ningún efecto.
Todor Todorov
8

Mis cinco centavos en este caso es que no quiero tener que apuntar al modal de arranque con una identificación y, dado que solo debería haber un modal a la vez, lo siguiente debería ser suficiente para eliminar el modal, ya que la alternancia podría ser peligrosa :

$('.modal').removeClass('show');
Andre Van Zuydam
fuente
2
Las intenciones son buenas, pero este enfoque no siempre funcionará. A otros elementos de la página, incluidos <body>, se les agregan clases que también tendrían que revertirse. La mejor respuesta es usar el 'hide'método.
JustinStolle
7

En algunas circunstancias, el error de escritura podría ser el culpable. Por ejemplo, asegúrese de tener:

data-dismiss="modal"

y no

data-dissmiss="modal"

Observe la doble "ss" en el segundo ejemplo que hará que falle el botón Cerrar.

zinc zinc
fuente
6

Podemos cerrar la ventana emergente modal de las siguientes maneras:

// We use data-dismiss property of modal-up in html to close the modal-up,such as

<div class='modal-footer'><button type='button' class="btn btn-default" data-dismiss='modal'>Close</button></div>

 // We can close the modal pop-up through java script, such as

 <div class='modal fade pageModal'  id='openModal' tabindex='-1' data-keyboard='false' data-backdrop='static'>

    $('#openModal').modal('hide'); //Using modal pop-up Id.
    $('.pageModal').modal('hide'); //Using class that is defined in modal html.
Sheo Dayal Singh
fuente
6

$('.modal.in').modal('hide');

use el código anterior para ocultar el fondo de modal si está utilizando pop múltiple modal en una página.

Sher Bahadur
fuente
O solo $('.modal').modal('hide');lo hará.
Matt Roy el
6

<!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/2.1.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script>
$(window).load(function(){
      $('#myModal').modal('show');
});
$(function () {
   $('#modal').modal('toggle');
});
</script>
</head>
<body>

<div class="container">
  <h2>Modal Example</h2>
  <!-- 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>

</body>
</html>

Ganesh Putta
fuente
Error: "mensaje": "Error de tipo no capturado: $ (...).
Modal
Si. Tengo el error si "Ejecutar fragmento de código" en Chrome (Linux Mint). Pero funciona en Firefox.
Ivan Burlutskiy
1
@Ivan Burlutskiy, gracias por informarme, este es un problema con jquery include, así que lo arreglé. ahora funciona bien en todos los navegadores.
Ganesh Putta
5
   function Delete(){
       var id = $("#dgetid").val();
       debugger
       $.ajax({
           type: "POST",
           url: "Add_NewProduct.aspx/DeleteData",
           data: "{id:'" + id + "'}",
           datatype: "json",
           contentType: "application/json; charset=utf-8",
           success: function (result) {
               if (result.d == 1) {
                   bindData();
                   setTimeout(function(){ $('#DeleteModal').modal('hide');},1000);
               }
           }
       });
   };
Sheladiya Ajay
fuente
Hola, gracias por su respuesta. He formateado esto como código (que era bastante simple, solo sangra un poco más la primera línea). Sin embargo, supongo que solo $('#DeleteModal').modal('hide');es relevante aquí?
Rup
4

puedes usar;

$('#' + $('.modal.show').attr('id')).modal('hide');
Fatih Turan
fuente
3

Usar modal.hide solo ocultaría el modal. Si está utilizando superposición debajo del modal, todavía estaría allí. use la llamada de clic para cerrar el modal y eliminar la superposición.

$("#modalID .close").click()
Vikalp Veer
fuente
3

Otra forma de hacerlo es que primero elimine la clase modal-open, que cierra el modal. Luego elimina la clase modal-backdrop que elimina la cubierta grisácea del modal.

Se puede usar el siguiente código:

$('body').removeClass('modal-open')
$('.modal-backdrop').remove()  
Orozcorp
fuente
Intente evitar simplemente descargar el código como respuesta e intente explicar qué hace y por qué. Es posible que su código no sea obvio para las personas que no tienen la experiencia de codificación relevante. Edite su respuesta para incluir aclaraciones, contexto e intente mencionar cualquier limitación, suposición o simplificación en su respuesta.
Fritas
OK, básicamente lo que esto hace es eliminar la clase modal-open, que cierra el modal. luego elimina la clase modal-telón de fondo que elimina la cubierta grisácea del modal
Orozcorp
3

Cerré modal programáticamente con este truco

Agregue un botón en modal con data-dismiss="modal"y oculte el botón con display: none. Así es como se verá

<div class="modal fade" id="addNewPaymentMethod" role="dialog">
  <div class="modal-dialog">
   .
   .
   .
   <button type="button" id="close-modal" data-dismiss="modal" style="display: none">Close</button>
  </div>
</div>

Ahora, cuando desee cerrar modal mediante programación, simplemente active un evento de clic en ese botón, que no es visible para el usuario

En Javascript puede activar el clic en ese botón de esta manera:

document.getElementById('close-modal').click();
Zohab Ali
fuente
2

Este código funcionó perfectamente para mí para cerrar un modal (estoy usando bootstrap 3.3)

$('#myModal').removeClass('in')
usuario3870075
fuente
2

En mi caso, la página principal desde donde se activó el modo de arranque comenzó a no responder después de usar la $("#modal").modal('toggle');forma, pero comenzó a responder de la siguiente manera:

$("#submitBtn").on("click",function(){
  $("#submitBtn").attr("data-dismiss","modal");
});
Awais Nasir
fuente
2

Esto funciona bien

$(function () {
   $('#modal').modal('toggle');
});

Sin embargo, cuando tiene múltiples modales apilados uno encima del otro, no es efectivo, por lo que esto funciona

data-dismiss="modal"
Edgar256
fuente
2

Después de algunas pruebas, descubrí que para el modo de arranque debe esperar un tiempo antes de ejecutar $(.modal).modal('hide')después de la ejecución $(.modal).modal('show'). Y descubrí que en mi caso necesito al menos un intervalo de 500 milisegundos entre los dos.
Así que este es mi caso de prueba y solución:

$('.modal-loading').modal('show');
setTimeout(function() {
  $('.modal-loading').modal('hide');
}, 500);
ibrahim saputra
fuente
esto resuelve los problemas que tuve con el modal no cerrando cuando abro otro, gracias
hal9000
2

Puede ver esta referencia, pero si se ha eliminado este enlace, lea esta descripción:

Llame a un modal con id myModal con una sola línea de JavaScript:

$('#myModal').modal(options)

Opciones

Las opciones se pueden pasar a través de atributos de datos o JavaScript. Para los atributos de datos, agregue el nombre de la opción a data- , como en data-backdrop = "" .

|-----------|-------------|--------|---------------------------------------------|
| Name      | Type        | Default| Description                                 |
|-----------|-------------|--------|---------------------------------------------|
| backdrop  | boolean or  | true   | Includes a modal-backdrop element.          |
|           | the string  |        | Alternatively, specify static for a         |
|           | 'static'    |        | backdrop which doesn't close the modal      |
|           |             |        | on click.                                   |
|           |             |        |                                             |
| keyboard  | boolean     | true   | Closes the modal when escape key is pressed.|   
|           |             |        |                                             |
| focus     | boolean     | true   | Puts the focus on the modal when initialized|       
|           |             |        |                                             |
| show      | boolean     | true   | Shows the modal when initialized.           |
|-----------|-------------|--------|---------------------------------------------|

Métodos

Métodos asíncronos y transiciones

Todos los métodos API son asíncronos y comienzan una transición. Vuelven a la persona que llama tan pronto como se inicia la transición pero antes de que finalice. Además, se ignorará una llamada al método en un componente en transición.

Consulte nuestra documentación de JavaScript para obtener más información.

.modal (opciones)

Activa tu contenido como modal. Acepta un objeto de opciones opcionales.

$('#myModal').modal({
   keyboard: false
})

.modal ('alternar')

Alterna manualmente un modal. Regresa a la persona que llama antes de que el modal se haya mostrado u ocultado realmente (es decir, antes de que ocurra el evento shown.bs.modal u hidden.bs.modal).

$('#myModal').modal('toggle')

.modal ('show')

Abre manualmente un modal. Regresa a la persona que llama antes de que se muestre el modal (es decir, antes de que ocurra el evento mostrado.bs.modal).

$('#myModal').modal('show')

.modal ('ocultar')

Oculta manualmente un modal. Regresa a la persona que llama antes de que el modal se haya ocultado realmente (es decir, antes de que ocurra el evento hidden.bs.modal).

$('#myModal').modal('hide')

.modal ('handleUpdate')

Reajuste manualmente la posición del modal si la altura de un modal cambia mientras está abierto (es decir, en caso de que aparezca una barra de desplazamiento).

$('#myModal').modal('handleUpdate')

.modal ('disponer')

Destruye el modal de un elemento.

Eventos

La clase modal de Bootstrap expone algunos eventos para engancharse a la funcionalidad modal. Todos los eventos modales se disparan en el modal mismo (es decir, en el **). Descripción del tipo

|----------------|--------------------------------------------------------------|
| Event Type     | Description                                                  |
|----------------|--------------------------------------------------------------|
| show.bs.modal  | This event fires immediately when the **show** instance      |
|                | method is called. If caused by a click, the clicked element  |
|                | is available as the **relatedTarget** property of the event. | 
|                |                                                              |
| shown.bs.modal | This event is fired when the modal has been made visible to  |
|                | the user (will wait for CSS transitions to complete). If     |
|                | caused by a click, the clicked element is available as the   | 
|                | **relatedTarget** property of the event.                     |
|                |                                                              |
| hide.bs.modal  | This event is fired immediately when the **hide** instance   |
|                | method has been called.                                      |
|                |                                                              |
| hidden.bs.modal| This event is fired when the modal has finished being hidden |
|                | from the user (will wait for CSS transitions to complete).   |
|----------------|--------------------------------------------------------------|

$('#myModal').on('hidden.bs.modal', function (e) {
  // do something...
})
mirzaei.sajad
fuente
0

Además, puede "hacer clic" en una 'x', que cierra el cuadro de diálogo. P.ej:

$(".ui-dialog-titlebar-close").click();

slashka
fuente
0

En mi caso, usé un botón para mostrar el modal

<button type="button" class="btn btn-success" style="color:white"
    data-toggle="modal" data-target="#my-modal-to-show" >
    <i class="fas fa-plus"></i> Call MODAL
</button>

Entonces, en mi código, para cerrar el modal (que tiene el id = 'my-modal-to-show') llamo a esa función (en mecanografiado angular):

closeById(modalId: string) {
  $(modalId).modal('toggle');
  $(modalId+ ' .close').click();
}

Si llamo $ (modalId) .modal ('hide') no funciona y no sé por qué

PD .: en mi modal también codifiqué ese elemento de botón con la clase .close

<button type="button" class="close" data-dismiss="modal" aria-label="Close"> 
    <span aria-hidden="true">&times;</span>
</button>
Anderson Dourado Cunha
fuente
0

algunas veces la solución no funciona, por lo que debería eliminar correctamente la clase y agregar la pantalla css: ninguna de forma manual.

$("#modal").removeClass("in");
$("#modal").css("display","none");
عبد الرحمان بويشو
fuente