So blenden Sie Bootstrap modal mit javascript?
Habe ich die Beiträge gelesen hier, der Bootstrap-Website, und Gegoogelt wie verrückt, aber kann Sie nicht finden, was ich bin sicher, dass wird eine einfach Antwort...
Ich habe eine Bootstrap-modal, die ich offen aus einem link_to-helper wie diese:
<%= link_to "New Contact", new_contact_path, {remote: true, 'data-toggle' => 'modal', 'data-target' => "#myModal", class: "btn btn-primary"} %>
In meinem ContactsController.create
Aktion, ich habe code, der erstellt Contact
geht dann aus, um create.js.erb
. In create.js.erb
habe ich einige Fehler-handling-code (eine Mischung aus ruby und javascript). Wenn alles gut geht, möchte ich schließen Sie den modal.
Dies ist, wo ich Probleme habe. Ich kann nicht scheinen, zu entlassen, der modal-wenn alles gut geht.
Ich habe versucht $('#myModal').modal('hide');
und hat dies keine Auswirkung. Ich habe auch versucht $('#myModal').hide();
die Ursachen der modal zu entlassen, lässt aber die Kulisse.
Jede Orientierung, wie Sie zum schließen des modalen und/oder zu entlassen, die Kulisse von innerhalb create.js.erb
?
Bearbeiten
Hier das markup für myModal:
<div class="modal hide" id="myModal" >
<div class="modal-header">
<a class="close" data-dismiss="modal">×</a>
<h3>Add Contact</h3>
<div id="errors_notification">
</div>
</div>
<div class="modal-body">
<%= form_for :contact, url: contacts_path, remote: true do |f| %>
<%= f.text_field :first_name, placeholder: "first name" %>
<%= f.text_field :last_name, placeholder: "last name" %>
<br>
<%= f.submit "Save", name: 'save', class: "btn btn-primary" %>
<a class="close btn" data-dismiss="modal">Cancel</a>
<% end %>
</div>
<div class="modal-footer">
</div>
</div>
$('#myModal').modal('hide');
ist die korrekte syntax zu schließen/verbergen des modal mit idmyModal
(Sie können dies testen, auf der Bootstrap-Dokumentation Seite). Sind Sie sicher, Sie haben ein element mit dieser id auf Ihrer Seite? Auch was du versucht zu erreichen, mit diesem Aufruf? Ihre aktuelle Implementierung führt einen Ajax-requestnew_contact_path
und gleichzeitig öffnet sich die modal mit dem Inhalt#myModal
– ist es das, was Sie wollen?- Hallo, Julian. Ich geschrieben myModal markup oben und es ist in der Tat ein div mit der id
myModal
. Ich wieder versucht$('myModal').modal('hide')
und immer noch nicht gut. HM. In Bezug auf was ich ' m versuchen zu erreichen, ich denke, es war vielleicht falsch zu verwenden, die link_to-helper. Ich habe ersetzt diese mit:<a data-toggle="modal" href="#myModal" class="btn btn-primary">Add Contact</a>
da ich nicht wirklich brauchen, ein Anrufnew_contact_path
. Ich will nur die modal zu öffnen, und dann deal mit user-input. Vielen Dank für die Zeit nehmen, zu reagieren. Ich werde sehen, ob kann ich nicht lösen. - Ich denke, es ist nur ein Tippfehler, aber der call sollte
$('#myModal').modal('hide');
(es ist ein#
fehlt in Ihrem Kommentar). - Meine schlecht für die Typisierung nicht kopiert, sondern aus dem tatsächlichen code. Der aktuelle code lautet:
$('#myModal').modal('hide')
. J - Können Sie versuchen, mit bootboxjs
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mit dem modal öffnen im browser-Fenster, benutzen Sie die browser-Konsole, um zu versuchen
Wenn es funktioniert (und das modal schließt), dann wissen Sie, dass Ihre enge Javascript ist nicht gesendet werden, vom server an den browser richtig.
Wenn es nicht funktioniert, dann brauchen Sie, um weiter zu untersuchen, auf dem client, was passiert ist. ZB stellen Sie sicher, dass es nicht zwei Elemente mit der gleichen id. ZB funktioniert es das erste mal nach der Seite geladen, aber nicht das zweite mal?
Browser-Konsole: firebug für firefox, die debugging-Konsole für Chrome oder Safari, etc.
schließen bootstrap modal, die Sie übergeben können "verstecken" als option modal-Methode wie folgt
Bitte werfen Sie einen Blick auf die Arbeit Fiedel hier
bootstrap bieten auch Veranstaltungen, können Sie Haken in modal Funktionalität, wie wenn Sie wollen das Feuer ein Ereignis, wenn der modal beendet hat, wird dem Benutzer verborgen bleibt, die Sie verwenden können versteckt.bs.modal Fall, Sie können mehr über die modalen Methoden und Ereignisse hier in Dokumentation
Wenn nicht von der oben beschriebenen Methode arbeiten, geben Sie eine id für Ihre close-button und trigger klicken Sie auf die Schaltfläche "schließen".
Ich benutze Bootstrap-3.4
Bei mir funktioniert das nicht
$('#myModal').modal('hide')
In meiner Verzweiflung,habe ich dies getan:
Ist es vielleicht nicht elegant, aber es funktioniert
Ich erlebte mit, dass die gleichen Fehler und diese Zeile code hilft mir wirklich.
Die Beste form, sich zu verstecken und zeigen ein modales mit bootstrap, es ist
Fand ich die richtige Lösung können Sie diesen code verwenden
(Bezogen auf Bootstrap 3) Zum ausblenden des modalen Nutzung:
$('#modal').modal('hide')
. Aber der Grund, die Kulisse gehängt um (für mich) war, weil ich die Zerstörung der DOM für den modalen vor 'hide' fertig.Diese zu lösen, ich kettete das versteckte Ereignis, mit dem DOM entfernen. In meinem Fall:
this.render()
this.render()
zeigt seineundefined is not a function
in meinem chrome-Konsole.Lief ich in das, was ich glaube, war ein ähnliches Problem. Die
$('#myModal').modal('hide');
ist wahrscheinlich durch die Funktion und trifft die LinieDas Problem ist, dass der Wert isShown undefiniert sein kann, auch wenn der modal angezeigt wird und der Wert sollte true sein. Ich habe geändert, die bootstrap-code leicht auf folgende
Schien dies zu beheben das Problem für die meisten Teil. Wenn der hintergrund bleibt immer noch, Sie könnten immer einen Anruf hinzufügen, um manuell entfernen Sie es nach dem ausblenden call
$('.modal-backdrop').remove();
. Nicht ideal, aber funktioniert.Hatte ich mehr Glück, die den Aufruf nach den "gezeigten" callback aufgetreten:
Diese gewährleistet die modale war fertig geladen, bevor die hide () - Aufruf durchgeführt wurde.
Was wir fanden war, dass es nur zu einer leichten Verzögerung zwischen dem Aufruf unserer server-code und die Rückkehr zum Erfolg zurück. Wenn wir wickelte den Aufruf an den server in der
$("#myModal").on('hidden.bs.modal', function (e)
handler und rief dann die$("#myModal").modal("hide");
Methode, den browser ausblenden, die modal-und dann rufen Sie das server-side-code.Wieder, nicht elegant, aber funktionell.
Wie Sie sehen können, wenn
myFunc
aufgerufen wird, wird es zu verbergen die modal-und dann rufen Sie das server-side-code.War ich mit dem gleichen problem, und nach ein wenig Experimentieren fand ich die Lösung. In meiner click-handler, ich brauchte halt die Veranstaltung vom sprudeln, etwa so:
Hier ist die Dokumentation:
http://getbootstrap.com/javascript/#modals-methods
Hier ist die Methode:
$('#myModal').modal('hide')
Wenn Sie brauchen, um öffnen Sie mehrmals am modal mit unterschiedlichen Inhalten, schlage ich vor, auf "hinzufügen" (in der Sie Haupt-js):
So dass Sie reinigen Sie die Inhalte für die nächste öffnung und vermeiden eine Art von caching
Müssen wir aufpassen, Ereignis-bubbling. Hinzufügen einer Zeile code
Ich weiß, das ist eine alte Frage, aber ich fand, dass keines von diesen waren wirklich das, was ich suchte genau. Es scheint verursacht zu werden, indem Sie versuchen, schließen Sie die modale, bevor es fertig ist zeigen.
Meine Lösung basiert auf einer @schoonie23 Antwort, aber ich musste ein paar Dinge ändern.
Erste, als ich erklärte, dass eine Globale variable oben in mein Skript:
Dann in meinem modal-code:
Dann so aus: (Hinweis: der name 'angezeigt.bs.modal', die angibt, dass das modal hat gezeigt, ganz im Gegensatz zu 'zeigen', die ausgelöst wird, wenn das show-Ereignis aufgerufen wird. (Ich habe ursprünglich versucht nur 'gezeigt' aber es hat nicht funktioniert.)
Hoffe, das spart jemand die extra Forschung einige Tag. Ich verbrachte ein bisschen auf der Suche nach einer Lösung, bevor ich kam mit dieser.
Sogar ich habe die gleiche Art von Fragen. Das half mir sehr
$('#modal').modal('hide');
und seine Varianten haben bei mir nicht funktioniert, es sei denn, ich hattedata-dismiss="modal"
als Attribut auf die Schaltfläche Abbrechen. Wie Sie, meine Bedürfnisse wurden, um möglicherweise in der Nähe /womöglich nicht in der Nähe, basierend auf einige zusätzliche Logik so auf einen link mitdata-dismiss="modal"
Siegwette würde das nicht tun. Ich landete mit einem versteckten button mitdata-dismiss="modal"
konnte, dass ich programmatisch aufrufen der click-handler aus, sound dann im click-Handler für "Abbrechen", wenn Sie brauchen, um in der Nähe der modalen können Sie
Dies ist die schlechte Praxis, aber Sie können diese Technik verwenden, um in der Nähe modal durch Aufruf der Schaltfläche "schließen" in javascript.
Dies wird in der Nähe modal nach 3 Sekunden.
Habe ich dieses code -
Verstecken modal mit glatten Effekt mit Fade-Out.
Wenn Sie die close-Klasse in Ihrem modals, die folgenden arbeiten. Die vom Anwendungsfall abhängig sind, empfehle ich grundsätzlich filtern, um nur die sichtbaren modal, wenn es mehr als ein modals mit der close-Klasse.
Ich habe diesen einfachen code:
diese kann getan werden einfach nur HTML: