Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

240
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda