Sweetalert: Zweiter Swal nicht ausgeführt

Erstellt am 15. Jan. 2015  ·  19Kommentare  ·  Quelle: t4t5/sweetalert

Hallo,

Ich habe diesen Sweet-Alter-Anruf:

var self = this; 

swal({
      title              : $.t('modal.clear.title') || "Etes vous sûr ?",
      text               : $.t('modal.clear.text') || "Le formulaire sera définitivement perdu !",
      type               : "warning",
      showCancelButton   : true,
      confirmButtonColor : "#DD6B55",
      confirmButtonText  : $.t('modal.clear.yes') || "Oui, supprimer",
      cancelButtonText   : $.t('modal.clear.no') || "Annuler",
      closeOnCancel      : true
}, function(isConfirm) {
   if (isConfirm){
       // I Use backbone radio event
       self.homePageChannel.trigger('deleteForm', self.currentSelectedForm)
   }
});

Im Rückruf sende ich ein Ereignis mit Backbone-Radio.
An diesem Punkt ist alles gut.

Und in meiner Ereignisantwort möchte ich eine weitere süße Warnung wie diese anzeigen:

formDeleted : function(result) {
        swal({
            title : $.t('modal.deleted.title') || 'Formulaire supprimé !',
            text  : $.t('modal.deleted.text') || 'Votre formulaire a été supprimé avec succès',
            type  : "success",
        });
  },

Und der zweite süße Alarm erscheint nicht.
Und ich bin sicher, dass die formDeleted-Funktion ausgeführt wird.

Danke für Ihre Hilfe

bug

Hilfreichster Kommentar

falls dies jemandem hilft. In meinem Fall konnte ich das klären, indem ich closeOnCancel und / oder closeOnConfirm auf false . Dadurch wird das Schließen der zweiten Warnbox verhindert. Der zweite Swal-Anruf kann sie auf true .

Alle 19 Kommentare

Könnten Sie versuchen, uns Ihren Code in einer JSFiddle zu zeigen?

Ich habe eine JSFiddle erstellt: http://jsfiddle.net/5pj7wwx9/

Wenn ich auf die Schaltfläche klicke, wird der erste sweetAlert angezeigt, der Rückruf wird aufgerufen, aber der zweite sweetAlert-Nr.

Sie werden in der JSFiddle sehen, die ich mit einem setTimeout ausprobiert habe, es funktioniert nach 2 Sekunden

Ich habe das gleiche Problem. Bereit, alle Informationen bereitzustellen, die zum Sortieren erforderlich sind.

+1 auf die für das Problem erforderliche Lösung

falls dies jemandem hilft. In meinem Fall konnte ich das klären, indem ich closeOnCancel und / oder closeOnConfirm auf false . Dadurch wird das Schließen der zweiten Warnbox verhindert. Der zweite Swal-Anruf kann sie auf true .

Das ist kein korrektes Verhalten, wir sollten uns nicht darauf verlassen, welchen Wert closeOnCancel und closeOnConfirm haben.

Ich stimme zu, aber es könnte der beabsichtigte Zweck von closeOnConfirm da dies auch in den Swal-Beispielen dargestellt wird, die eine zweite Box öffnen (http://tristanedwards.me/sweetalert).
Ich stimme immer noch zu, dass es definitiv nicht intuitiv ist.

für mich funktioniert auch das nicht. Sie können sich die Geige ansehen, die ich erstellt habe. https://jsfiddle.net/madhureng/5pj7wwx9/16/

Ich werde mehr als glücklich sein, dass es behoben wird, anstatt dass API eine Entscheidung für mich trifft.

@ maddy2308 - du hast zu viele Klicks. Es funktioniert.
Schauen Sie sich diese Geige an: https://jsfiddle.net/g8j1acv4/

Ich habe nur Ihr erstes document.click herausgenommen und es in document.ready geändert.

Wie @joenorton betont , ist dies das, wofür closeOnConfirm: false ist. Ich bin damit einverstanden, dass es ein wenig unintuitiv ist. Wenn also jemand eine Lösung für das Problem hat, würde ich sie gerne hinzufügen!

@ maddy2308 , das Problem mit Ihrer Geige ist, dass $('button') zu mehrdeutig ist, sodass auch die Schaltflächen des Swals aufgerufen werden. Wenn Sie es auch ändern $('body > button') sollte es funktionieren.

Ich habe auch unter diesem Problem gelitten, und ich glaube, dass dies geändert werden muss.

@ t4t5 Ohne den Quellcode zu betrachten, können wir Folgendes annehmen:

the first swal is shown at point A in time
the user interacts with the first swal at point B in time
the callback is called and invokes the second swal at point C in time
the active swal is dismissed at point D in time

Eine einfache Lösung zur Lösung dieses Problems wäre folgende:

<strong i="11">@A</strong>: An integer variable is set that increases with every call to swal
<strong i="12">@B</strong>: The current value of the variable is remembered
<strong i="13">@D</strong>: If the variable has changed, do not call swal.close

Auf diese Weise kann C eine beliebige Anzahl neuer Dialoge aufrufen, wobei nur sehr wenige Änderungen an der aktuellen Codebasis erforderlich sind.

Ich hatte das gleiche Problem und habe es gelöst, indem ich ein $ timeout für die Bestätigungsaktion hinzugefügt habe (mit Angular).
if (isConfirm){ return $timeout(function() { // I Use backbone radio event self.homePageChannel.trigger('deleteForm', self.currentSelectedForm) }, 100); }

Dieser Fehler tritt auch bei mir in folgender Situation auf:

  1. Rufen Sie eine Bestätigungs-Benachrichtigung an, die eine $http -Anforderung für Angular auslöst
  2. Erzwingen Sie einen sofortigen Fehler $http Anforderung von den Entwicklertools von offline .
  3. Rufen Sie einen Fehler-Sweet-Alert $http einem Fehler von

Die erste Bestätigungswarnung wird in Ordnung angezeigt, die Fehlerwarnung jedoch nicht.

Hinweis: Ich habe mich nicht mit dem Code befasst, aber es sieht so aus, als ob die Animation zum Schließen einer vorhandenen süßen Warnung abgebrochen und sofort zerstört werden sollte. Dann wird die zweite Warnung in Ordnung angezeigt.


Bearbeiten: Wie ich erwartet hatte, liegt das Problem bei der ersten Bestätigung der süßen Warnung. Das Setzen von animation auf false beim ersten Swal stoppt das Problem. Aber es sieht für mich wie ein BUG aus, weil ich möchte, dass die Animation aktiviert wird, falls der Fehler nicht auftritt.

Ich schlage zwei Lösungen vor:

1. Wenn eine zweite Warnung aufgerufen wird, während eine vorhandene Warnung animiert wird, stoppen Sie den Animationsprozess, schließen Sie sofort die aktuelle Warnung und zeigen Sie die neue an.

2. Warteschlange der zweiten Warnung, die geöffnet werden soll, wenn die Animation zum Schließen abgeschlossen ist.

Die 2. Lösung sollte die Dinge reibungsloser machen, während die 1. Lösung den Fehler modal erscheinen lässt!

Ich werde versuchen, eine Pull-Anfrage zu stellen, aber ich habe noch nie zu diesem Projekt beigetragen. Wenn jemand weiß, wo es zu beheben ist, können Sie die Pull-Anfrage zuerst stellen! :) :)

@ t4t5 Bitte Problem beheben!

Sie können querySelectorAll verwenden , es gibt alle Elemente zurück, sodass Sie die zurückgegebenen Werte durchlaufen können

var alertBtn = document.querySelectorAll('.js-alert');

for (var i = 0; i < alertBtn.length; i++) {
    alertBtn[i].onclick = function(){
        swal({
            title: "text",
            text: "text text"
            });
    };
}

Hatte das gleiche Problem mit meinem SweetAlert, wenn der zweite Swal erscheinen sollte, tun sie es nicht, ich bekomme nur einen Fehler in meiner Konsole, der durch das Einfügen eines $ timeout in meine Funktion behoben wurde.

function(error) { console.log(error); $timeout(function(){ SweetAlert.error('Erro'); },100) }

Ich hatte das gleiche Problem, aber die Lösung von @PommeVerte hat es gelöst. Ich musste closeOnCancel: false auf das übergeordnete swal () setzen.

Ab SweetAlert 2.0 werden closeOnConfirm und closeOnCancel nicht mehr benötigt, um SweetAlerts zu verketten. Nutze einfach Versprechen ! :) :)

SetTimeout kann das Problem nach dem Rückruf lösen, aber ich möchte mehr über die Ursache des Problems erfahren.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

daftspunk picture daftspunk  ·  4Kommentare

xgqfrms-GitHub picture xgqfrms-GitHub  ·  4Kommentare

rapeflower picture rapeflower  ·  4Kommentare

waldyrious picture waldyrious  ·  5Kommentare

vmitchell85 picture vmitchell85  ·  6Kommentare