Bootstrap: apri un altro modale in Modal


95

Quindi, sto usando questo codice per aprire un'altra finestra modale in una finestra modale aperta corrente:

<a onclick=\"$('#login').modal('hide');$('#lost').modal('show');\" href='#'>Click</a>

Quello che succede è che per circa 500 ms la barra di scorrimento si duplicherà. Immagino perché l'attuale modale sta ancora svanendo. Tuttavia sembra molto poco fluido e balbettante.

Apprezzerei qualsiasi suggerimento per risolvere questo problema.

Inoltre, il modo in cui costruirlo in un evento onclick non è professionale?

Sto lavorando con la versione bootstrap 3.0.

Modifica: immagino che sia necessario ridurre il tempo di dissolvenza di un modale. Com'è possibile?


3
Un esempio funzionante può essere trovato su bootply.com/lvKQA2AM28
CrandellWS

Risposte:


86

data-dismiss fa chiudere la forza della finestra modale corrente

data-toggleapre un nuovo modale con il hrefcontenuto al suo interno

<a data-dismiss="modal" data-toggle="modal" href="#lost">Click</a>

o

<a data-dismiss="modal" onclick="call the new div here">Click</a>

fateci sapere se funziona.


Grazie, funziona ed evita di usare "onclick". Ma l'animazione raddoppia ancora la barra di scorrimento per un secondo.
AlexioVay

@ user2829128 questo è ciò che data-dismissfa. Chiude la finestra corrente e ne apre una nuova. Puoi inserire il tuo codice in bootplyo jsfiddle?
jayeshkv

14
Lo scorrimento non funzionerebbe sul secondo modale se l'altezza è lunga.
Giraldi

Lo stesso qui con bootstrap v4. Quando clicco sul pulsante sul primo mondal si apre un altro modale, il secondo modale mostra con lo scroll del corpo. I problemi sono in classe .modal-open per il corpo. Si rimuove quando si fa clic e non si aggiunge di nuovo.
fdrv

7
.modal { overflow-y: auto }risolve il problema di scorrimento BS4.
Riki137

84

La mia soluzione non chiude il modale inferiore, ma si accumula davvero su di esso. Conserva correttamente il comportamento di scorrimento. Testato in Bootstrap 3. Affinché i modali si impilino come previsto, è necessario che siano ordinati nel markup Html dal più basso al più alto.

$(document).on('hidden.bs.modal', function (event) {
  if ($('.modal:visible').length) {
    $('body').addClass('modal-open');
  }
});

AGGIORNAMENTO: Quando hai le modali impilate, tutti gli sfondi appaiono sotto il modale più basso. Puoi risolverlo aggiungendo il seguente CSS:

.modal-backdrop {
    visibility: hidden !important;
}
.modal.in {
    background-color: rgba(0,0,0,0.5);
}

Ciò darà l'aspetto di uno sfondo modale sotto il modale visibile più in alto. In questo modo rende grigi i tuoi modali inferiori sotto.


2
Gli elementi successivi nel markup della pagina hanno uno z-index naturalmente più alto e verranno impilati sopra gli elementi che sono apparsi in precedenza nel markup. A meno che non imposti uno z-index esplicito.
H Dog

1
@H Dog: esattamente quello di cui avevo bisogno :) funziona perfettamente. Grazie!
Tobias Koller

2
Veramente leggendario !! Ho capovolto ogni volta che qualcuno mi ha suggerito di usare un plugin proprio per questo ... volevo solo avere una soluzione semplice per un semplice problema e il gioco è fatto ... Saluti!
Fr0zenFyr

2
Grazie mille, per il TUO aiuto. La tua soluzione è stata contro il mio problema, quando uso due modali contemporaneamente !!!!!
Levon

3
Javascript ha funzionato per Bootstrap 4, tuttavia, CSS no. Invece ho nascosto lo sfondo e poi ho aggiunto .modal: after {content: ""; blocco di visualizzazione; sfondo: rgba (0,0,0, .5); posizione: fissa; in alto: 0; in basso: 0; larghezza: 100%; z-index: -1; }
Jason G.


18

prova questo

<!DOCTYPE html>
<html lang="en">
<head>
  <title></title>
  <meta charset="utf-8">
  <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
  <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
</head>
<body>

  <button type="button" class="btn btn-info btn-lg" data-toggle="modal" data-target="#test1">Open Modal 1 </button>



<div id="test1" class="modal fade" role="dialog" style="z-index: 1400;">
  <div class="modal-dialog">
    <!-- Modal content-->
    <div class="modal-content">
      
      <div class="modal-body">
      	<button type="button" class="btn btn-info btn-lg" data-toggle="modal"      data-target="#test2">Open Modal 2</button>
      	
      </div>      
    </div>
  </div>
</div>

<div id="test2" class="modal fade" role="dialog" style="z-index: 1600;">
  <div class="modal-dialog">
    <!-- Modal content-->
    <div class="modal-content">
      
      <div class="modal-body">
      	
        content
      	
      </div>      
    </div>
  </div>
</div>
  

</body>
</html>


1
fallire per me .. = (il modale funziona ma se il primo modale è lungo, viene visualizzata una pergamena per il primo modale e quando apri il secondo modale e lo chiudi il primo scorrimento modale non funziona.
Vincent Dapiton

Grazie mille, è stato di grande aiuto :)
Daniel Muñoz

17

Puoi effettivamente rilevare quando il vecchio modale si chiude chiamando l' hidden.bs.modalevento:

    $('.yourButton').click(function(e){
        e.preventDefault();

        $('#yourFirstModal')
            .modal('hide')
            .on('hidden.bs.modal', function (e) {
                $('#yourSecondModal').modal('show');

                $(this).off('hidden.bs.modal'); // Remove the 'on' event binding
            });

    });

Per maggiori informazioni: http://getbootstrap.com/javascript/#modals-events


16

Aggiornamento per il 2018: utilizzo di Bootstrap 4

Ho scoperto che la maggior parte delle risposte sembra contenere molte jQuery non necessarie. Per aprire un modale da un altro modale può essere fatto semplicemente utilizzando gli eventi forniti da Bootstrap comeshow.bs.modal . Potresti anche volere un po 'di CSS per gestire le sovrapposizioni di sfondo. Ecco le 3 modali aperte da altri scenari ...

Apri modale da un altro modale (mantieni aperto il primo modale)

<a data-toggle="modal" href="#myModal" class="btn btn-primary">Launch modal</a>

<div class="modal" id="myModal">
        <div class="modal-dialog">
          <div class="modal-content">
            <div class="modal-header">
              <h4 class="modal-title">Modal title</h4>    
              <button type="button" class="close" data-dismiss="modal">×</button>
            </div><div class="container"></div>
            <div class="modal-body">
              ...
              <a data-toggle="modal" href="#myModal2" class="btn btn-primary">Open modal2</a>
            </div>
            <div class="modal-footer">
              <a href="#" data-dismiss="modal" class="btn">Close</a>
            </div>
          </div>
        </div>
</div>
<div class="modal" id="myModal2" data-backdrop="static">
        <div class="modal-dialog">
          <div class="modal-content">
            <div class="modal-header">
              <h4 class="modal-title">2nd Modal title</h4>
              <button type="button" class="close" data-dismiss="modal">×</button>
            </div><div class="container"></div>
            <div class="modal-body">
              ..
            </div>
            <div class="modal-footer">
              <a href="#" data-dismiss="modal" class="btn">Close</a>
              <a href="#" class="btn btn-primary">Save changes</a>
            </div>
          </div>
        </div>
</div>

Un potenziale problema in questo caso è che lo sfondo del 2 ° modale nasconde il 1 ° modale. Per evitare ciò, crea il 2 ° modale data-backdrop="static"e aggiungi un po 'di CSS per correggere gli z-index degli sfondi ...

/* modal backdrop fix */
.modal:nth-of-type(even) {
    z-index: 1052 !important;
}
.modal-backdrop.show:nth-of-type(even) {
    z-index: 1051 !important;
}

https://www.codeply.com/go/NiFzSCukVl


Apri modale da un altro modale (chiudi il primo modale)

Questo è simile allo scenario precedente, ma poiché stiamo chiudendo il primo modale quando viene aperto il secondo, non è necessaria la correzione CSS dello sfondo. Una semplice funzione che gestisce il 2 ° show.bs.modalevento modale chiude il 1 ° modale.

$("#myModal2").on('show.bs.modal', function (e) {
    $("#myModal1").modal("hide");
});

https://www.codeply.com/go/ejaUJ4YANz


Apri modale all'interno di un altro modale

L'ultimo scenario con modalità multiple sta aprendo il 2 ° modale all'interno del 1 ° modale. In questo caso il markup per il 2 ° è posto all'interno del 1 °. Non sono necessari CSS o jQuery aggiuntivi.

<div class="modal" id="myModal1">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <h4 class="modal-title">Modal title</h4>
                <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
            </div>
            <div class="container"></div>
            <div class="modal-body">
                ...
                <a data-toggle="modal" href="#myModal2" class="btn btn-primary">Launch modal 2</a>
            </div>
            <div class="modal-footer">
                <a href="#" data-dismiss="modal" class="btn">Close</a>
            </div>
        </div>
    </div>

    <div class="modal" id="myModal2">
        <div class="modal-dialog">
            <div class="modal-content">
                <div class="modal-header">
                    <h4 class="modal-title">2nd Modal title</h4>
                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
                </div>
                <div class="container"></div>
                <div class="modal-body">
                    ...
                </div>
                <div class="modal-footer">
                    <a href="#" data-dismiss="modal" class="btn">Close</a>
                    <a href="#" class="btn btn-primary">Save changes</a>
                </div>
            </div>
        </div>
    </div>
</div>

https://www.codeply.com/go/iSbjqubiyn


Non funziona in Bootstrap 4. Quando chiudi il secondo modale, il primo non può più scorrere.
Justin

@ Justin - Non vedo uno scenario specifico che lo dimostri, e poiché lo scorrimento è al di fuori dell'ambito della domanda originale. Ti suggerisco di cercare o porre un'altra domanda specifica per il problema dello scorrimento.
Zim

l'ennesimo di tipo non ha funzionato per me perché non guarda alla classe. Ho funzionato con: .modal-backdrop.show + .modal.show { z-index: 1052 !important; } .modal-backdrop.show + .modal.show + .modal-backdrop.show { z-index: 1051 !important; }
webhead

14

Modali in modale:

$('.modal-child').on('show.bs.modal', function () {
    var modalParent = $(this).attr('data-modal-parent');
    $(modalParent).css('opacity', 0);
});
 
$('.modal-child').on('hidden.bs.modal', function () {
    var modalParent = $(this).attr('data-modal-parent');
    $(modalParent).css('opacity', 1);
});
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

<a href="#myModal" role="button" class="btn btn-primary" data-toggle="modal">Modals in Modal</a>


<div id="myModal" class="modal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <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">
                <a href="#myModal1" role="button" class="btn btn-primary" data-toggle="modal">Launch other modal 1</a>
                <a href="#myModal2" role="button" class="btn btn-primary" data-toggle="modal">Launch other modal 2</a>
            </div>

        </div>
    </div>
</div>

<div id="myModal1" class="modal modal-child" data-backdrop-limit="1" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" data-modal-parent="#myModal">
    <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 1</h4>
            </div>
            <div class="modal-body">
                <p>Two modal body…1</p>
            </div>
            <div class="modal-footer">
                <button class="btn btn-default" data-dismiss="modal" data-dismiss="modal" aria-hidden="true">Cancel</button>
            </div>

        </div>
    </div>
</div>

<div id="myModal2" class="modal modal-child" data-backdrop-limit="1" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" data-modal-parent="#myModal">
    <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 2</h4>
            </div>
            <div class="modal-body">
                <p>Modal body…2</p>
            </div>
            <div class="modal-footer">
                <button class="btn btn-default" data-dismiss="modal" data-dismiss="modal" aria-hidden="true">Cancel</button>
            </div>

        </div>
    </div>
</div>


fallire per me .. = (il modale funziona ma se il primo modale è lungo, viene visualizzata una pergamena per il primo modale e quando apri il secondo modale e lo chiudi il primo scorrimento modale non funziona.
Vincent Dapiton

L'esempio sopra genera modale al posto del primo modale non in cima né in (il primo non è più visibile).
JackTheKnife

Effetto molto bello.
Jorge B.

Come è possibile utilizzare la tua soluzione in Semantic UI?
vahidsamimi

9

Lavorare su un progetto che ha molti modali che chiamano altri modali e alcuni ragazzi HTML che potrebbero non sapere di avviarlo ogni volta per ogni pulsante. È arrivato a una conclusione simile a @gmaggio, a malincuore dopo aver fatto il lungo giro per primo.

EDIT: ora supporta le modali chiamate tramite javascript.

MODIFICA: ora funziona l'apertura di un modale di scorrimento da un altro modale.

$(document).on('show.bs.modal', function (event) {
    if (!event.relatedTarget) {
        $('.modal').not(event.target).modal('hide');
    };
    if ($(event.relatedTarget).parents('.modal').length > 0) {
        $(event.relatedTarget).parents('.modal').modal('hide');
    };
});

$(document).on('shown.bs.modal', function (event) {
    if ($('body').hasClass('modal-open') == false) {
        $('body').addClass('modal-open');
    };
});

Basta posizionare il pulsante di chiamata modale come di consueto, e se viene raccolto per essere all'interno di un modale, chiuderà quello corrente prima di aprire quello specificato in data-target. Nota cherelatedTarget è fornito da Bootstrap.

Ho anche aggiunto quanto segue per attenuare un po 'la dissolvenza: sono sicuro che si può fare di più.

.modal-backdrop.fade + .modal-backdrop.fade {
    transition: opacity 0.40s linear 0s;
}

Non è un tuo problema al 100%, ma il gancio modale mostrato è piuttosto utile. La gestione della classe body.modal-open sembra essere buggata in BS v.3.3.5, dopo aver chiuso un modale e aperto un altro manca e quindi lo sfondo scorre invece del (secondo) modale. Il tuo Hook può correggere quel comportamento.
Manuel Arwed Schmidt

7

La documentazione di Twitter dice che è richiesto un codice personalizzato ...

Funziona senza JavaScript aggiuntivo, tuttavia, il CSS personalizzato sarebbe altamente raccomandato ...

<link href="http://netdna.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="//netdna.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<!-- Button trigger modal -->
    <button class="btn btn-primary btn-lg" data-toggle="modal" data-target="#modalOneModal">
      Launch demo modal
    </button> 
            <!-- Modal -->
            <div class="modal fade bg-info" id="modalOneModal" tabindex="-1" role="dialog" aria-labelledby="modalOneLabel" aria-hidden="true">
    
              <div class="modal-dialog">
          
                <div class="modal-content  bg-info">
                  <div class="modal-header btn-info">
                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
                    <h4 class="modal-title" id="modalOneLabel">modalOne</h4>
                  </div>
                  <div id="thismodalOne" class="modal-body bg-info">
                
                
              <!-- Button trigger modal -->
    <button class="btn btn-primary btn-lg" data-toggle="modal" data-target="#twoModalsExample">
      Launch demo modal
    </button>
             
                    <div class="modal fade bg-info" id="twoModalsExample" style="overflow:auto" tabindex="-1" role="dialog" aria-hidden="true">
                <h3>EXAMPLE</h3>
            </div>
                  </div>
                  <div class="modal-footer btn-info" id="woModalFoot">
                    <button type="button" class="btn btn-info" data-dismiss="modal">Close</button>
                  </div>
                </div>
              </div>
            </div>
    <!-- End Form Modals -->


1
Ecco un altro esempio con il 2 ° modale formattato correttamente bootply.com/qRsvPSrcO5
Zim

1
@Skelly cambiare lo z-index come hai fatto nel css è una buona idea ...z-index: 1080 !important;
CrandellWS

4
Se apri il 2 ° modale e fai clic all'esterno, verrà visualizzato un bug. (Chrome, ultimo)
Martin Braun,

forse mi sbaglio ma credo che i documenti dicano di non mettere un modal in un modal, quindi non è sorprendente
CrandellWS

7

Per bootstrap 4, per espandere la risposta di @ helloroy ho usato quanto segue; -

var modal_lv = 0 ;
$('body').on('shown.bs.modal', function(e) {
    if ( modal_lv > 0 )
    {
        $('.modal-backdrop:last').css('zIndex',1050+modal_lv) ;
        $(e.target).css('zIndex',1051+modal_lv) ;
    }
    modal_lv++ ;
}).on('hidden.bs.modal', function() {
    if ( modal_lv > 0 )
        modal_lv-- ;
});

Il vantaggio di quanto sopra è che non avrà alcun effetto quando c'è un solo modale, si attiva solo per i multipli. In secondo luogo, delega la gestione all'organismo per garantire che i futuri modelli che non sono attualmente generati siano ancora soddisfatti.

Aggiornare

Il passaggio a una soluzione combinata js / css migliora l'aspetto: l'animazione di dissolvenza continua a funzionare sullo sfondo; -

var modal_lv = 0 ;
$('body').on('show.bs.modal', function(e) {
    if ( modal_lv > 0 )
        $(e.target).css('zIndex',1051+modal_lv) ;
    modal_lv++ ;
}).on('hidden.bs.modal', function() {
    if ( modal_lv > 0 )
        modal_lv-- ;
});

combinato con il seguente css; -

.modal-backdrop ~ .modal-backdrop
{
    z-index : 1051 ;
}
.modal-backdrop ~ .modal-backdrop ~ .modal-backdrop
{
    z-index : 1052 ;
}
.modal-backdrop ~ .modal-backdrop ~ .modal-backdrop ~ .modal-backdrop
{
    z-index : 1053 ;
}

Questo gestirà le modali annidate fino a 4 profonde, che è più del necessario.


Non funziona in Bootstrap 4. Quando chiudi il secondo modale, il primo non può più scorrere.
Justin

4

Prova questo:

// Hide the login modal
$('#login').modal('hide');

// Show the next modal after the fade effect is finished
setTimeout(function(){ $('#lost').modal('show'); }, 500);

Questo semplice trucco funziona per me.


4

Per qualcuno che usa bootstrap 4 https://jsfiddle.net/helloroy/tmm9juoh/

var modal_lv = 0;
$('.modal').on('shown.bs.modal', function (e) {
    $('.modal-backdrop:last').css('zIndex',1051+modal_lv);
    $(e.currentTarget).css('zIndex',1052+modal_lv);
    modal_lv++
});

$('.modal').on('hidden.bs.modal', function (e) {
    modal_lv--
});
<script src="https://code.jquery.com/jquery-3.1.1.slim.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" rel="stylesheet"/>

<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#modal-a">
  Launch demo modal a
</button>

<div class="modal fade" id="modal-a" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="exampleModalLabel">Modal title</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body">
        <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#modal-b">
  Launch another demo modal b
</button>
<p class="my-3">
Not good for fade In.
</p>
<p class="my-3">
who help to improve?
</p>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Save changes</button>
      </div>
    </div>
  </div>
</div>

<div class="modal fade" id="modal-b" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="exampleModalLabel">Modal title</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body">
        <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#modal-c">
  Launch another demo modal c
</button>
<p class="my-3">
But good enough for static modal
</p>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Save changes</button>
      </div>
    </div>
  </div>
</div>


<div class="modal" id="modal-c" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="exampleModalLabel">Modal title</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body">
<p class="my-3">That's all.</p>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Save changes</button>
      </div>
    </div>
  </div>
</div>


Questo è fantastico, l'unico problema rimasto è impedire la ricomparsa della barra di scorrimento quando il modale più in alto è chiuso
HyperActive

Come posso utilizzare la tua soluzione nell'interfaccia utente semantica?
vahidsamimi

2

Ho anche avuto qualche problema con i miei modali scorrevoli, quindi ho fatto qualcosa del genere:

  $('.modal').on('shown.bs.modal', function () {
    $('body').addClass('modal-open');
    // BS adds some padding-right to acomodate the scrollbar at right
    $('body').removeAttr('style');
  })

  $(".modal [data-toggle='modal']").click(function(){
    $(this).closest(".modal").modal('hide');
  });

Servirà per qualsiasi modale all'interno di un modale che appare. Nota che il primo è chiuso in modo che possa apparire il secondo. Nessun cambiamento nella struttura Bootstrap.


2

Ho seguito un percorso diverso tutti insieme, ho deciso di "De-Nest" loro. Forse qualcuno lo troverà utile ...

var $m1 = $('#Modal1');
var $innermodal = $m1.find(".modal");     //get reference to nested modal
$m1.after($innermodal);                  // snatch it out of inner modal and put it after.

Grazie mille

2

Il mio codice funziona bene usando la cancellazione dei dati.

<li class="step1">
    <a href="#" class="button-popup" data-dismiss="modal" data-toggle="modal" data-target="#lightbox1">
        <p class="text-label">Step 1</p>
        <p class="text-text">Plan your Regime</p>
    </a>

</li>
<li class="step2">
    <a href="#" class="button-popup" data-dismiss="modal" data-toggle="modal" data-target="#lightbox2">
        <p class="text-label">Step 2</p>
        <p class="text-text">Plan your menu</p>
    </a>
</li>
<li class="step3 active">
    <a href="#" class="button-popup" data-toggle="modal" data-dismiss="modal" data-target="#lightbox3">
        <p class="text-label">Step 3</p>
        <p class="text-text">This Step is Undone.</p>
    </a>
</li>

1

Chiudi il primo modale Bootstrap e apri dinamicamente il nuovo modale.

$('#Modal_One').modal('hide');
setTimeout(function () {
  $('#Modal_New').modal({
    backdrop: 'dynamic',
    keyboard: true
  });
}, 500);

1

Perché non modificare semplicemente il contenuto del corpo modale?

    window.switchContent = function(myFile){
        $('.modal-body').load(myFile);
    };

Nel modale è sufficiente inserire un collegamento o un pulsante

    <a href="Javascript: switchContent('myFile.html'); return false;">
     click here to load another file</a>

Se vuoi solo passare tra 2 modali:

    window.switchModal = function(){
        $('#myModal-1').modal('hide');
        setTimeout(function(){ $('#myModal-2').modal(); }, 500);
        // the setTimeout avoid all problems with scrollbars
    };

Nel modale è sufficiente inserire un collegamento o un pulsante

    <a href="Javascript: switchModal(); return false;">
     click here to switch to the second modal</a>

È più simile a una risposta relativa alla UX, perché avevo bisogno di questo per visualizzare un messaggio di errore relativo a Modal # 1. Quindi Modal # 2 aveva il messaggio di errore. Ma sono passati secoli da quando ho posto questa domanda e sto facendo questo genere di cose in modo diverso ora.
AlexioVay

0

prova questo:

$('.modal').on('hidden.bs.modal', function () {
//If there are any visible
  if($(".modal:visible").length > 0) {
      //Slap the class on it (wait a moment for things to settle)
      setTimeout(function() {
          $('body').addClass('modal-open');
      },100)
  }
});

0

La risposta data da H Dog è ottima, ma questo approccio in realtà mi dava uno sfarfallio modale in Internet Explorer 11. Bootstrap nasconderà prima il modale rimuovendo la classe 'modal-open', quindi (usando la soluzione H Dogs) aggiungiamo il di nuovo classe 'modal-open'. Sospetto che ciò stia in qualche modo causando lo sfarfallio che stavo vedendo, forse a causa di un rendering HTML / CSS lento.

Un'altra soluzione è prevenire il bootstrap nella rimozione della classe "modal-open" dall'elemento body in primo luogo. Utilizzando Bootstrap 3.3.7, questo override della funzione interna hideModal funziona perfettamente per me.

$.fn.modal.Constructor.prototype.hideModal = function () {
    var that = this
    this.$element.hide()
    this.backdrop(function () {
        if ($(".modal:visible").length === 0) {
            that.$body.removeClass('modal-open')
        }
        that.resetAdjustments()
        that.resetScrollbar()
        that.$element.trigger('hidden.bs.modal')
    })
}

In questo override, la classe "modal-open" viene rimossa solo quando non ci sono modali visibili sullo schermo. E impedisci a un frame di rimuovere e aggiungere una classe all'elemento body.

Basta includere l'override dopo che il bootstrap è stato caricato.


-4

$(document).on('hidden.bs.modal', function (event) {
  if ($('.modal:visible').length) {
    $('body').addClass('modal-open');
  }
});

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.