BootStrap

Abrir modal dentro de otro modal en Bootstrap 5

Aprenderemos a Abrir modal dentro de otro modal en Bootstrap 5. En Bootstrap 5, abrir un modal dentro de otro puede causar problemas debido a la gestión del z-index y el backdrop (fondo opaco). Para solucionarlo, puedes hacer lo siguiente:

Solución: Manejar la apertura/cierre manualmente

  1. Usar data-bs-backdrop="static" para evitar que el modal principal se cierre al hacer clic fuera.
  2. Cerrar el primer modal antes de abrir el segundo usando JavaScript.
  3. Reabrir el primer modal cuando se cierre el segundo.
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Modal dentro de otro Modal - Baulphp</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>

<!-- Botón para abrir el primer modal -->
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#modal1">
  Abrir Modal 1
</button>


<!-- Modal 1 -->
<div class="modal fade" id="modal1" tabindex="-1" aria-labelledby="modal1Label" aria-hidden="true" data-bs-backdrop="static">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="modal1Label">Modal 1</h5>
        <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Cerrar"></button>
      </div>
      <div class="modal-body">
        Contenido del primer modal.
        <br>
        <button type="button" class="btn btn-success" id="openModal2">
          Abrir Modal 2
        </button>
      </div>
    </div>
  </div>
</div>


<!-- Modal 2 -->
<div class="modal fade" id="modal2" tabindex="-1" aria-labelledby="modal2Label" aria-hidden="true">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="modal2Label">Modal 2</h5>
        <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Cerrar"></button>
      </div>
      <div class="modal-body">
        Contenido del segundo modal.
      </div>
    </div>
  </div>
</div>


<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
<script>
  document.addEventListener("DOMContentLoaded", function() {
    const modal1 = new bootstrap.Modal(document.getElementById('modal1'));
    const modal2 = new bootstrap.Modal(document.getElementById('modal2'));


    document.getElementById("openModal2").addEventListener("click", function() {
      modal1.hide(); // Oculta el primer modal
      setTimeout(() => modal2.show(), 500); // Abre el segundo modal con un pequeño retraso
    });


    document.getElementById("modal2").addEventListener("hidden.bs.modal", function() {
      modal1.show(); // Vuelve a abrir el primer modal al cerrar el segundo
    });
  });
</script>


</body>
</html>

Explicación del código anterior:

  1. data-bs-backdrop="static": Evita que el modal se cierre al hacer clic fuera.
  2. modal1.hide() antes de abrir modal2.show(): Se cierra el primer modal antes de abrir el segundo.
  3. Cuando se cierra modal2, se vuelve a abrir modal1.

Resultado: Se abre el Modal 1, desde ahí puedes abrir el Modal 2 sin problemas. Al cerrar el Modal 2, el Modal 1 reaparece.
Espero que este ejemplo les ayude en sus proyectos!!

Nestor Tapia

Bloggero, amante de la programación PHP, innovador y me fascina compartir información. Desde que conocí el entorno informatico y el internet me llamó la atención la programación, Por tal motivo he creado mi blog BAULPHP.COM para compartir mis experiencias con todos ustedes. ¡Gracias por leerme!.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Esta web utiliza cookies propias para su correcto funcionamiento. Contiene enlaces a sitios web de terceros con políticas de privacidad ajenas que podrás aceptar o no cuando accedas a ellos. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad