Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

248
Views
¿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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!