Sweetalert: Tab funktioniert nicht im Formular, wenn Sweet Alert angezeigt wird

Erstellt am 27. Juni 2015  ·  21Kommentare  ·  Quelle: t4t5/sweetalert

Ich verwende Sweet Alert im HTML-Formular, das beim Klicken auf die Schaltfläche ein Popup ist, aber wenn ich auf die Schaltfläche OK des Popups klicke, funktioniert der Registerkartenindex danach nicht und ich muss auf jedes einzelne Feld klicken, um es auszufüllen.

Hilfreichster Kommentar

@kosst Ja, deine Lösung ist viel besser, denn mit der von @edwin1217 würde die standardmäßige Enter-

Hier nochmal was bei mir am besten funktioniert:

(function (){
    var close = window.swal.close;
    window.swal.close = function() {
        close();
        window.onkeydown = null;
    };
})();

Alle 21 Kommentare

Der gleiche Gedanke passiert mir.

Ja, passiert mir auch. Wenn Sie die Eingabetaste drücken, um das Popup zu schließen, wird der Fokus von der Seite entfernt und Sie können sich ohne Klicken nicht mehr auf die Seite konzentrieren.

Fensterereignisse in doneFunction entfernen lösen dieses Problem.

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

  // remove these events;
  window.onkeydown = null;
  window.onfocus = null;

  swal("Deleted!", "Your imaginary file has been deleted.", "success");
});

@fxghqc Entfernen von Ereignishandlern im Rückruf funktioniert für mich. Kann dies in den Hauptcode aufgenommen werden, um diesen Fehler zu verhindern?

+1

Wann wird das behoben?

+1

Gibt es irgendeine Abzweigung dieses Fehlers, mit der ich arbeiten kann? Ich bin mir nicht sicher, wie ich den Commit von
Ich habe auch nervige Probleme mit diesem Fehler.

Dieser Fehler existiert immer noch. Sie können es sogar auf der Hauptseite von Sweetalert-Demo sehen ... http://t4t5.github.io/sweetalert/

Klicken Sie einfach auf die Schaltfläche Try Me für das AJAX-Beispiel und stellen Sie dann fest, dass die Registerkarte nicht mehr funktioniert. Ich kann im Debugger sehen, dass window.onfocus nicht auf Null-Nachworte zurückgesetzt wird. Wenn ich es manuell einstelle, kann ich die Registerkarte wieder verwenden. Aber das Setzen auf null in der an swal() übergebenen Callback-Funktion funktioniert bei mir NICHT. Ich habe es dort auf null gesetzt, aber etwas anderes innerhalb von Sweetalert setzt es zurück, bevor der gesamte Prozess endet. Ein Einbruch in den Debugger einige Sekunden später bestätigt dies.

Bitte repariere!

Auch dieses Verhalten kann ich bestätigen. Es ist intermittierend, die beste Art von Fehler ...
Ich sehe, dass das window.onkeydown Ereignis an die Funktion gebunden ist, auch nachdem Dialoge geschlossen wurden ... und möglicherweise sogar bevor ein Dialog ausgelöst wurde.

Ich habe auch genau das gleiche Problem. Wenn das SweetAlert-Popup geschlossen wird, funktionieren die Tabs im Formular der Seite nicht mehr, selbst wenn tabindex festgelegt ist.

Ich werde morgen eine PR mit einem Fix dafür machen.
Am Dienstag, den 3. Januar 2017 um 21:15 Uhr schrieb Neel [email protected] :

Ich habe auch genau das gleiche Problem. Wenn das SweetAlert-Popup
geschlossen ist, funktionieren Tabs im Formular der Seite nicht mehr, selbst wenn tabindex gesetzt ist.


Sie erhalten dies, weil Sie einen Kommentar abgegeben haben.
Antworten Sie direkt auf diese E-Mail und zeigen Sie sie auf GitHub an
https://github.com/t4t5/sweetalert/issues/391#issuecomment-270197639 ,
oder den Thread stumm schalten
https://github.com/notifications/unsubscribe-auth/AHWwZbRIQD1HLSs4WpN87HRyeBlvGgcuks5rOp43gaJpZM4FNSiU
.

Das wird richtig toll @EduardJS Danke dafür.

Momentan verwende ich die Lösung von

(function (){

    var _swal = window.swal;

    window.swal = function(){

        var previousWindowKeyDown = window.onkeydown;

        _swal.apply(this, Array.prototype.slice.call(arguments, 0));

        window.onkeydown = previousWindowKeyDown;

    };

})();

REF: https://github.com/t4t5/sweetalert/issues/127

@Herr-Anonym
aktualisieren

var _swalclose=window.swal.close;
var_swal = Fenster.swal;
window.swal = function(){
var previousWindowKeyDown = window.onkeydown;
_swal.apply(dies, Array.prototype.slice.call(Argumente, 0));
window.onkeydown = previousWindowKeyDown;
};
window.swal.close=function(){
_swalclose.apply(dies);
};

Beeindruckend! ich habe gerade diesen Thread gefunden. Ich habe mich tagelang gefragt, warum meine Tabs funktionieren und dann nicht. Jetzt merke ich, dass ich manchmal einen Sweetalert benutze und das ist der Grund, warum es aufgehört hat!

Arbeitet noch jemand an einer Lösung dafür und was ist die beste Lösung, um jetzt damit umzugehen?

Edit: habe gerade die sweetalert2-Nachricht oben gesehen. Ich wusste nicht, dass es eine andere Version gibt, also probiere ich es aus, aber es gibt noch einiges zu tun, um zu migrieren!

@elasticsteve Wenn Sie auf die anderen Threads in diesem Repo achten, werden Sie feststellen, dass dieser nicht mehr gepflegt wird.

Es gibt ein weiteres Repo namens SweetAlert2 , auf das Sie Ihre Apps wirklich portieren sollten.

Wenn Sie diese Version dennoch verwenden möchten, ist die einzige Lösung diese. Ich habe vergessen, eine PR zu machen. Ich hatte nicht genug Zeit. Die Lösung von @edwin1217 ist die, mit der Sie gehen sollten.

Die Lösung von @edwin1217 ist fast die gleiche, die ich vor

Danke an alle. Ich habe versucht, auf SweetAlert2 zu portieren, musste aber aufgeben. Ich konnte mit closeOnConfirm: false keine einfache Texteingabe durchführen. Nachdem ich 3 Stunden verschwendet hatte, kehrte ich zurück und werde die obigen Vorschläge ausprobieren.

@kosst Ja, deine Lösung ist viel besser, denn mit der von @edwin1217 würde die standardmäßige Enter-

Hier nochmal was bei mir am besten funktioniert:

(function (){
    var close = window.swal.close;
    window.swal.close = function() {
        close();
        window.onkeydown = null;
    };
})();

}

Ich weiß, es ist wirklich lange her, aber wären Sie so freundlich zu erklären, wie ich diese Funktion als Ganzes in einer anderen Funktion aufrufen kann? Wo soll ich dieses Snippet im Controller platzieren?

function(isConfirm){  //Function that triggers on user action.
        if(isConfirm){
          $scope.myData.splice(index,1);
          SweetAlert.swal("Deleted!");
        } else {
            SweetAlert.swal("Your file is safe!");
        }

Veränderung -
closeOnConfirm: false
ZU -
closeOnConfirm: wahr

das wars... bei mir hat es funktioniert

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

waldyrious picture waldyrious  ·  5Kommentare

krishnamraju picture krishnamraju  ·  3Kommentare

fracz picture fracz  ·  4Kommentare

jamieson99 picture jamieson99  ·  3Kommentare

rafatux picture rafatux  ·  5Kommentare