Sweetalert: 'Uncaught RangeError: Maximale Call-Stack-Größe überschritten.' Error

Erstellt am 10. Okt. 2014  ·  10Kommentare  ·  Quelle: t4t5/sweetalert

SweetAlert funktioniert einwandfrei, aber ich habe einen Fehler. Ich verwende Bootstrap-Modal und während ich es geöffnet habe, verwende ich auch SweetAlert. Nachdem ich im SweetAlert auf 'Abbrechen', 'OK'... geklickt habe, erhalte ich den Fehler 'Uncaught RangeError: Maximale Aufrufstapelgröße überschritten'. Das Problem liegt hier:

      if (btnIndex === -1) {
        // Something in the dom, but not a visible button. Focus back on the button.
        $targetElement.focus();
      }

Wenn ich diesen Code kommentiere, habe ich den Fehler nicht mehr.
PS: Ich erhalte diesen Fehler nicht, wenn ich das Modal nicht geöffnet habe.

Hilfreichster Kommentar

Ich habe die Lösung:
Auskommentieren:
$targetElement.focus ();
_Wahrscheinlich in der Reihe 413._

Alle 10 Kommentare

Ich hatte diesen Fehler auch.
Es liegt daran, dass SweetAlert mit dem Bootstrap-Modal abstürzt. Ich denke, Sie versuchen, eine süße Warnung auszulösen, wenn Sie ein geöffnetes Modal (von Bootstrap) haben. Dann tritt dieser Fehler auf, den Sie erwähnt haben.
Sie müssen irgendwie (na ja, ich weiß nicht, was Ihre Bedürfnisse sind) zuerst das Bootstrap-Modal schließen und erst dann den süßen Alarm auslösen. Und es wird in Ordnung sein.

Danke @littleneotrix. Genau, ich habe versucht, die süße Warnung auszulösen, während das Bootstrap-Modal geöffnet wurde und Ihre Lösung vollständig funktioniert, aber in meiner App musste ich es so belassen, deshalb musste ich den Code kommentieren.

Naja, du kannst also ein bisschen damit experimentieren und spielen...
Sie können mit Javascript direkt bevor Sie den Sweetalert öffnen, verwenden Sie einfach .hide() auf dem Bootstrap-Modal,
und öffnen Sie erst dann den Sweetalert, aber machen Sie es mehr oder weniger so:

swal({   title: "Are you sure?",   text: "Your will not be able to recover this imaginary file!",   type: "warning",   showCancelButton: true,   confirmButtonColor: "#DD6B55",   confirmButtonText: "Yes, delete it!",   closeOnConfirm: false }, function(){   $('#myModal').modal('show')});

Wie Sie in der Funktion am Ende des Objekts sehen können, sage ich ihm, dass er das Modal zurückfordern soll.
Also ... zuerst das Modal ausblenden -> den Sweetalert auffordern -> beim Bestätigen von Sweetalert das Modal zurückfordern.
Das ist die beste Lösung die ich anbieten kann ;)
Es sei denn, Bootstrap repariert dieses Ding natürlich.

Ich habe das gleiche Problem. Ist das ein Bootstrap- oder Sweetalert-Problem? Die Warnmeldung wird in meinem Fall von sweetalert generiert, könnte aber durch Bootstrap verursacht werden.

Ich habe den gleichen Fehler
In meinem Fall habe ich Schaltflächen in meinem Modal, die Schaltflächen bedeuten, Dinge zu löschen, wenn sie angeklickt werden, benutze ich swal zur Bestätigung, an dieser Stelle kein Fehler, aber wenn ich fortfahre und auf die Schaltfläche "Abbrechen" oder "Bestätigen" klicke, bekomme ich die Error.

Ich bekomme dieses Problem auch und verzichte vorerst auf die Verwendung der Alert-Klasse von Bootstrap.

Ich bin auf das gleiche Problem gestoßen und habe einen anständigen Weg gefunden, damit umzugehen. Ich verstecke im Grunde das Modal, zeige Swal und bringe das Modal beim Bestätigen zurück. Wenn man zum Beispiel ein Magnific-Popup verwendet, würde der Code so aussehen:

$('.mfp-wrap').hide();
swal({
    title: "Updated!",
    text: "#" + data.updateData['number'] + " was successfully updated",
    type: "success"
},
function(isConfirm) {
    $('.mfp-wrap').show();
});

Das ist im Grunde das, worüber @littleneotrix gesprochen hat. Ich habe seine Erklärung zuerst nicht verstanden und dachte, ich würde ein detaillierteres Beispiel geben. Ich finde es eine elegante genug Lösung für meinen Anwendungsfall.

Für diejenigen, die fragen, ich glaube nicht, dass die Entwickler viel tun können, um dieses Problem zu beheben. Doppelte Modalitäten und Rückrufe sind heftig.

Ich habe die Lösung:
Auskommentieren:
$targetElement.focus ();
_Wahrscheinlich in der Reihe 413._

Fügen Sie einfach $.fn.modal.Constructor.prototype.enforceFocus = function () {}; bevor Sie swal(...); anrufen

Behalten wir es in einer Ausgabe: https://github.com/aspnetboilerplate/aspnetboilerplate-templates/issues/48

Versuchen Sie es in SweetAlert 2.0 noch einmal.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

adiwithadidas picture adiwithadidas  ·  4Kommentare

blackrosezy picture blackrosezy  ·  6Kommentare

krishnamraju picture krishnamraju  ·  3Kommentare

vmitchell85 picture vmitchell85  ·  6Kommentare

sastrahost picture sastrahost  ·  5Kommentare