2013-10-30 9 views
18

Ich bin ein bisschen verwirrt über das Auslösen einer Rückruffunktion in JavaScript modal Bootstrap3. Im normalen jquery.post können Sie es tun wie,Callback-Funktion in modal von bootstrap3

$.post('path', { something: something }, function(data) { 
    console.log(data); 
}); 

Aber in Bootstrap-3 modal feuere ich die modal durch Skript und ich mache es wie diese Basis, wie ich die Erklärung in ihrer Website zu verstehen.

Aber traurig zu sagen, wenn ich auf die Schaltfläche klicke, passiert nichts, nichts wurde in der Konsole protokolliert. Wie rufe ich eine Callback-Funktion in einem modalen Bootstrap 3 auf?

Antwort

24

Für Bootstrap 3 sind die wichtigsten Events Namensraum, so dass die show Ereignis für die modale show.bs.modal ...

$('#myModal').on('show.bs.modal', function (e) { 
    alert('modal show'); 
}); 

Demo wäre: http://bootply.com/90952

+0

Das ist nicht für mich 3.3.1 auf Version funktioniert, kann diese verbessert werden? –

+1

Was funktioniert in 3.3.1 nicht? http://bootply.com/zCGQs1Zbta – ZimSystem

+0

Tut mir leid, es hat nicht funktioniert für mich zum ersten Mal, aber ich glaube, dass es ist ein Klick auf eine Schaltfläche, um dies zu aktivieren, aber jetzt habe ich es in Klick und Ereignis aufgeteilt es funktioniert jetzt . –

11

Nur ein wenig für die erste Antwort hinzufügen Es ist, weil, wenn der Rückruf ausgelöst wird, das DOM innerhalb des Modals noch nicht vollständig geladen ist, vielleicht sollte es hier ein wenig hacken, um die Aktion nach dem Rückruf für eine Weile zurückzuhalten. Ich hoffe es hilft!

$('#myModal').on('show.bs.modal', function (e) { 
    setTimeout(function(){ 
     // something here 
    }, 300); 
}); 
+0

Timeout mein Leben retten! – Nantaphop

11

@Skelly richtig ist, können Sie die show.bs.modal Veranstaltung wie diese verwenden:

$('#myModal').on('show.bs.modal', function (e) { 
    alert('modal show'); 
}); 

Die offizielle Dokumentation sagt:

Dieses Ereignis wird ausgelöst, sofort, wenn die Show Instanz Methode aufgerufen wird.

Bitte beachten Sie, dass dieses Ereignis "ziemlich bald" ausgelöst wird und Sie stattdessen shown.bs.modal verwenden müssen.

Dokumentation über dieses Ereignis:

Dieses Ereignis wird ausgelöst, wenn die modale für den Benutzer sichtbar gemacht wurde (wird warten Transitionen CSS abgeschlossen).

Diese Auswirkungen @Keith yeoh's Antwort und Sie sollten vermeiden Timeouts, wenn möglich.

Quelle: Official Bootstrap documentation

+4

'show.bs.modal' funktionierte überhaupt nicht für mich. 'Show.bs.modal' war die Lösung für mich. Vielen Dank! – regularmike

+0

'shown' wird aufgerufen, wenn das modale beendet wird,' show' wird aufgerufen, wenn es zu öffnen beginnt. Sie sollten herausfinden, warum es nicht funktioniert hat, da dies ein unerwartetes Verhalten ist und keine Aliase voneinander sind. – SISYN

+1

Es gibt dieses kleine N in show.bs und showN.bs. Danke für den Dokumentationstipp! ;) – Soley

4

Ich denke, besser sein wird, verwenden "shown.bs.modal" es fiered wird, wenn modal ist allready geladen. Bootstrap modal events

$('#myModal').on('shown.bs.modal', function (e) { 
    alert('modal is allready shown'); 
}); 
+0

sollte es die angenommene antwort sein :) – JCarlos

+0

Genau! Show ist, wenn Modal zu zeigen beginnt, gezeigt wenn fertig – Artur79

0

es Wrap mit

$(window).on('load', function() { 
    ...modal callback here. 
}); 
Verwandte Themen