Abrir modal dentro de otro modal en Bootstrap 5

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

💣 Descarga sistemas PHP y Laravel COMPLETOS GRATIS
Recursos premium listos para usar en proyectos reales 💻
👥 +1000 desarrolladores · 🔥 Publicaciones diarias
🔥 Unirme al canal GRATIS ahora 👥 Grupo de Facebook
⏳ Enlaces disponibles por tiempo limitado
💻 Sistemas completos 🔌 Plugins PRO ⚡ Scripts listos 🔥 Recursos exclusivos

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuarlo!

Promedio de puntuación 0 / 5. Recuento de votos: 0

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.

Leave a comment

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