Sweetalert: La pestaña no funciona en el formulario cuando aparece una alerta dulce

Creado en 27 jun. 2015  ·  21Comentarios  ·  Fuente: t4t5/sweetalert

Estoy usando la alerta dulce en el formulario html que aparece al hacer clic en el botón, pero cuando hago clic en el botón Aceptar de la ventana emergente, el índice de la pestaña no funciona después de eso y tengo que hacer clic en todos y cada uno de los campos para completarlo.

Comentario más útil

@kosst Sí, su solución es mucho mejor, porque con la de @ edwin1217, la acción de la tecla Enter predeterminada para Aceptar y los mensajes de error (modales de texto de entrada) no funcionarían.

Aquí de nuevo lo que me funciona mejor:

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

Todos 21 comentarios

A mí me pasa lo mismo.

Sí, me pasa a mí también. Además, al presionar Intro para descartar la ventana emergente, se quita el enfoque de la página y no puede enfocarse en la página nuevamente sin hacer clic.

eliminar eventos de ventana en doneFunction resuelve esto.

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 eliminar los controladores de eventos en la devolución de llamada funciona para mí. ¿Se puede incluir esto en el código principal para evitar este error?

+1

¿Cuándo se va a arreglar esto?

+1

¿Hay alguna bifurcación de este error con la que pueda trabajar? No estoy seguro de cómo usar la confirmación de @ xiaouze88 .
También tengo problemas molestos con respecto a este error.

Este error todavía existe. Incluso puede verlo en la página principal de demostración de sweetalert ... http://t4t5.github.io/sweetalert/

Simplemente haga clic en el botón Pruébame para ver el ejemplo de AJAX y luego observe que la pestaña ya no funciona. Puedo ver en el depurador que window.onfocus no se está restaurando a las palabras posteriores nulas. Si lo configuro manualmente, puedo usar la pestaña nuevamente. Pero establecerlo en nulo en la función de devolución de llamada pasada a swal () NO funciona para mí. Lo configuré como nulo allí, pero algo más interno de Sweetalert lo está configurando antes de que finalice todo el proceso. Irrumpir en el depurador varios segundos más tarde confirma esto.

¡Por favor, arregla!

También puedo confirmar este comportamiento. Es intermitente, el mejor tipo de error ...
Veo que el evento window.onkeydown está vinculado a la función incluso después de que se han cerrado los cuadros de diálogo ... y posiblemente incluso antes de que se haya activado un cuadro de diálogo.

También estoy experimentando exactamente el mismo problema. Cuando se cierra la ventana emergente SweetAlert, las pestañas en el formulario de la página dejan de funcionar incluso con tabindex establecido.

Mañana haré un PR con una solución para esto.
El martes 3 de enero de 2017 a las 21:15, Neel [email protected] escribió:

También estoy experimentando exactamente el mismo problema. Cuando la ventana emergente SweetAlert
está cerrado, las pestañas en el formulario de la página dejan de funcionar incluso con tabindex configurado.

-
Estás recibiendo esto porque comentaste.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/t4t5/sweetalert/issues/391#issuecomment-270197639 ,
o silenciar el hilo
https://github.com/notifications/unsubscribe-auth/AHWwZbRIQD1HLSs4WpN87HRyeBlvGgcuks5rOp43gaJpZM4FNSiU
.

Eso será realmente genial @EduardJS Gracias por eso.

Por ahora estoy usando la solución de @JustinWinthers en otro hilo:

(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

@ Mr-Anónimo
actualizar

var _swalclose = window.swal.close;
var _swal = window.swal;
window.swal = function () {
var previousWindowKeyDown = window.onkeydown;
_swal.apply (esto, Array.prototype.slice.call (argumentos, 0));
window.onkeydown = previousWindowKeyDown;
};
window.swal.close = function () {
_swalclose.apply (esto);
};

¡Guau! Acabo de encontrar este hilo. Pasé días preguntándome por qué mis pestañas funcionan y luego no. ¡Ahora me doy cuenta de que a veces uso un dulce y esa es la razón por la que se detuvo!

¿Alguien todavía está trabajando en una solución para esto y cuál es la mejor solución para lidiar con eso por ahora?

Editar: acabo de ver el mensaje sweetalert2 arriba. No sabía que había otra versión, así que lo intentaré, ¡pero hay bastante trabajo por hacer para migrar!

@elasticsteve Si prestas atención a los otros subprocesos en este repositorio, notarás que este ya no se mantiene.

Hay otro repositorio llamado SweetAlert2 , al que realmente debería

Sin embargo, si aún desea usar esta versión, la única solución es esta. Olvidé hacer un PR ... no tuve suficiente tiempo. La solución de @ edwin1217 es la que debe

La solución de @ edwin1217 es casi la misma que

Gracias a todos. Traté de migrar a SweetAlert2, pero tuve que rendirme. No pude hacer una entrada de texto simple con closeOnConfirm: false trabajo. Después de perder 3 horas, volví hacia atrás y probaré las sugerencias anteriores.

@kosst Sí, su solución es mucho mejor, porque con la de @ edwin1217, la acción de la tecla Enter predeterminada para Aceptar y los mensajes de error (modales de texto de entrada) no funcionarían.

Aquí de nuevo lo que me funciona mejor:

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

}

Sé que ha pasado mucho tiempo, pero ¿sería tan amable de explicar cómo puedo llamar a esta función como un todo en otra función? ¿Dónde debo colocar este fragmento en el controlador?

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

cambio -
closeOnConfirm: falso
PARA -
closeOnConfirm: verdadero

eso es todo ... funcionó para mí

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

blackrosezy picture blackrosezy  ·  6Comentarios

rafatux picture rafatux  ·  5Comentarios

rapeflower picture rapeflower  ·  4Comentarios

krishnamraju picture krishnamraju  ·  3Comentarios

Lusitaniae picture Lusitaniae  ·  4Comentarios