Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

840
Vistas
¿Manera de saber si el usuario hizo clic en Cancelar en un diálogo de Javascript antes de descargar?

Estoy abriendo un cuadro de diálogo cuando alguien intenta salir de una página en particular sin haber guardado su trabajo. Uso el evento onbeforeunload de Javascript, funciona muy bien.

Ahora quiero ejecutar un código Javascript cuando el usuario haga clic en "Cancelar" en el cuadro de diálogo que aparece (que dice que no quiere navegar fuera de la página).

es posible? También estoy usando jQuery, entonces, ¿hay tal vez un evento como beforeunloadcancel al que pueda vincularme?

ACTUALIZACIÓN : la idea es guardar y dirigir a los usuarios a una página web diferente si eligen cancelar

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Puedes hacerlo así:

 $(function() { $(window).bind('beforeunload', function() { setTimeout(function() { setTimeout(function() { $(document.body).css('background-color', 'red'); }, 1000); },1); return 'are you sure'; }); });

El código dentro del primer método setTimeout tiene un retraso de 1ms. Esto es solo para agregar la función a la UI queue de usuario. Dado que setTimeout se ejecuta de forma asíncrona, el intérprete de Javascript continuará llamando directamente a la declaración de return , que a su vez activa el cuadro de modal dialog de los navegadores. Esto bloqueará la UI queue de usuario y el código del primer setTimeout no se ejecutará hasta que se cierre el modal. Si el usuario presionó cancelar, activará otro setTimeout que se activa en aproximadamente un segundo. Si el usuario confirmó con ok, el usuario redirigirá y el segundo setTimeout nunca se activará.

ejemplo: http://www.jsfiddle.net/NdyGJ/2/

over 4 years ago · Santiago Trujillo Denunciar

0

Sé que esta pregunta es antigua ahora, pero en caso de que alguien todavía tenga problemas con esto, encontré una solución que parece funcionar para mí,

Básicamente, el evento de unload se activa después del evento beforeunload . Podemos usar esto para cancelar un tiempo de espera creado en el evento beforeunload , modificando la respuesta de jAndy:

 $(function() { var beforeUnloadTimeout = 0 ; $(window).bind('beforeunload', function() { console.log('beforeunload'); beforeUnloadTimeout = setTimeout(function() { console.log('settimeout function'); $(document.body).css('background-color', 'red'); },500); return 'are you sure'; }); $(window).bind('unload', function() { console.log('unload'); if(typeof beforeUnloadTimeout !=='undefined' && beforeUnloadTimeout != 0) clearTimeout(beforeUnloadTimeout); }); });

EDITAR: jsfiddle aquí

over 4 years ago · Santiago Trujillo Denunciar

0

Imposible. Tal vez alguien me demuestre que estoy equivocado... ¿Qué código quieres ejecutar? ¿Quieres guardar automáticamente cuando hacen clic en cancelar? Eso suena contrario a la intuición. Si aún no guardas automáticamente, creo que tiene poco sentido guardar automáticamente cuando presionan "Cancelar". Tal vez podría resaltar el botón Guardar en su controlador onbeforeunload para que el usuario vea lo que debe hacer antes de navegar.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda