Sweetalert: l'onglet ne fonctionne pas dans le formulaire lorsque l'alerte douce s'affiche

Créé le 27 juin 2015  ·  21Commentaires  ·  Source: t4t5/sweetalert

J'utilise sweet alert dans le formulaire html qui s'affiche en cliquant sur le bouton, mais lorsque je clique sur le bouton ok de la fenêtre contextuelle, l'index de l'onglet ne fonctionne pas après cela et je dois cliquer sur chaque champ pour le remplir.

Commentaire le plus utile

@kosst Oui, votre solution est bien meilleure, car avec celle de @edwin1217, l'action de touche Entrée par défaut pour OK et les messages d'erreur (modaux de saisie de texte) ne fonctionnerait pas.

Voici encore ce qui fonctionne le mieux pour moi :

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

Tous les 21 commentaires

La même réflexion m'arrive.

Oui, ça m'arrive aussi. En outre, appuyer sur Entrée pour fermer la fenêtre contextuelle supprime le focus de la page et vous ne pouvez pas vous concentrer à nouveau sur la page sans cliquer.

supprimer les événements de fenêtre dans doneFunction résout ce problème.

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 supprimer les gestionnaires d'événements dans le rappel fonctionne pour moi. Cela peut-il être inclus dans le code principal pour éviter ce bogue ?

+1

Quand cela sera-t-il corrigé ?

+1

Y a-t-il un fork de ce bogue avec lequel je peux travailler ? Je ne sais pas comment utiliser le commit de @xiaouze88 .
J'ai également des problèmes ennuyeux concernant ce bug.

Ce bug existe toujours. Vous pouvez même le voir sur la page de démonstration principale de sweetalert... http://t4t5.github.io/sweetalert/

Cliquez simplement sur le bouton Essayez-moi pour l'exemple AJAX, puis notez que cet onglet ne fonctionne plus. Je peux voir dans le débogueur que window.onfocus n'est pas restauré en postfaces nulles. Si je le définis manuellement, je peux à nouveau utiliser la tabulation. Mais le définir sur null dans la fonction de rappel transmise à swal() ne fonctionne PAS pour moi. Je l'ai défini sur null, mais quelque chose d'autre à l'intérieur de Sweetalert le réinitialise avant la fin du processus. Une intrusion dans le débogueur quelques secondes plus tard le confirme.

S'il-vous-plaît, réparez!

Je peux également confirmer ce comportement. C'est intermittent, le meilleur type de bug...
Je vois l'événement window.onkeydown lié à la fonction même après la fermeture des boîtes de dialogue... et peut-être même avant qu'une boîte de dialogue ne soit déclenchée.

Je rencontre aussi exactement le même problème. Lorsque la fenêtre contextuelle SweetAlert est fermée, les onglets du formulaire de la page cessent de fonctionner même avec tabindex défini.

Je ferai un PR demain avec un correctif pour cela.
Le mardi 3 janvier 2017 à 21h15, Neel [email protected] a écrit :

Je rencontre aussi exactement le même problème. Lorsque la fenêtre contextuelle SweetAlert
est fermé, les onglets du formulaire de la page ne fonctionnent plus même avec tabindex défini.

-
Vous recevez ceci parce que vous avez commenté.
Répondez directement à cet e-mail, consultez-le sur GitHub
https://github.com/t4t5/sweetalert/issues/391#issuecomment-270197639 ,
ou couper le fil
https://github.com/notifications/unsubscribe-auth/AHWwZbRIQD1HLSs4WpN87HRyeBlvGgcuks5rOp43gaJpZM4FNSiU
.

Ce sera vraiment génial @EduardJS Merci pour cela.

Pour l'instant, j'utilise la solution de @JustinWinthers dans un autre fil :

(function (){

    var _swal = window.swal;

    window.swal = function(){

        var previousWindowKeyDown = window.onkeydown;

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

        window.onkeydown = previousWindowKeyDown;

    };

})();

RÉF : https://github.com/t4t5/sweetalert/issues/127

@Mr-Anonyme
mettre à jour

var _swalclose=window.swal.close;
var _swal = fenêtre.swal;
window.swal = function(){
var previousWindowKeyDown = window.onkeydown;
_swal.apply(this, Array.prototype.slice.call(arguments, 0));
window.onkeydown = previousWindowKeyDown;
} ;
window.swal.close=function(){
_swalclose.apply (ceci);
} ;

Wow! Je viens de trouver ce fil. J'ai passé des jours à me demander pourquoi mes onglets fonctionnaient et non. Maintenant, je me rends compte que parfois j'utilise un sweetalert et c'est la raison pour laquelle il s'est arrêté !

Quelqu'un travaille-t-il toujours sur un correctif pour ce problème et quelle est la meilleure solution pour le résoudre pour le moment ?

Edit : je viens de voir le message sweetalert2 ci-dessus. Je ne savais pas qu'il existait une autre version, donc je vais essayer, mais il y a pas mal de travail à faire pour migrer !

@elasticsteve Si vous faites attention aux autres threads de ce référentiel, vous remarquerez que celui-ci n'est plus maintenu.

Il existe un autre référentiel appelé SweetAlert2 , vers lequel vous devriez vraiment porter vos applications.

Si vous souhaitez toujours utiliser cette version, la seule solution est celle-ci. J'ai oublié de faire un PR.. je n'ai pas eu assez de temps. La solution de @edwin1217 est celle avec laquelle vous devriez aller.

La solution de @edwin1217 est presque la même que celle que j'ai publiée dans le fil #127 il y a quelque temps.

Merci tout le monde. J'ai essayé de transférer vers SweetAlert2, mais j'ai dû abandonner. Je ne pouvais pas faire une simple saisie de texte avec closeOnConfirm: false . Après avoir perdu 3 heures, je suis revenu en arrière et j'essaierai les suggestions ci-dessus.

@kosst Oui, votre solution est bien meilleure, car avec celle de @edwin1217, l'action de touche Entrée par défaut pour OK et les messages d'erreur (modaux de saisie de texte) ne fonctionnerait pas.

Voici encore ce qui fonctionne le mieux pour moi :

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

}

Je sais que cela fait très longtemps, mais auriez-vous la gentillesse d'expliquer comment je peux appeler cette fonction dans son ensemble dans une autre fonction ? Où dois-je placer cet extrait dans le contrôleur ?

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!");
        }

monnaie -
closeOnConfirm : faux
À -
closeOnConfirm : vrai

c'est ça... ça a marché pour moi

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

fracz picture fracz  ·  4Commentaires

Lusitaniae picture Lusitaniae  ·  4Commentaires

vmitchell85 picture vmitchell85  ·  6Commentaires

krishnamraju picture krishnamraju  ·  3Commentaires

xgqfrms-GitHub picture xgqfrms-GitHub  ·  4Commentaires