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

216
Visualizações
Javascript abre una ventana después de un retraso y luego la cierra después de otro retraso

Trato de crear una función de JavaScript que, cuando el usuario hace clic en un botón, abre una nueva pestaña después de un pequeño período de tiempo, luego espera un segundo y la cierra.

Actualmente, mi código se ve así:

 var btn = document.getElementById("myLink"); btn.onclick = function() { setTimeout(function() { var win = window.open( "http://www.stackoverflow.com", "The new Link") },500); setTimeout(function(){ win.close(); if (win.closed) { clearInterval(timer); winClosed(); alert("'The new Link' window closed !"); } }, 2500); }

Pero la segunda función setTimeout no se ejecuta. Cuando elimino una de las dos funciones setTimeout , la otra funciona bien, pero necesito tener las dos en ejecución.

Editar: se cambiaron los valores de tiempo de espera para tener en cuenta el comentario de @ lk77.

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Hay 2 problemas en su código.

  1. está inicializando la variable win en el primer tiempo de espera, lo que significa que no estará disponible en el segundo tiempo de espera. Es posible que desee leer sobre el cierre y el alcance en javascript.
  2. Su primer tiempo de espera tiene un retraso de 1500 ms y el segundo 500 , lo que significa que el segundo tiempo de espera se dispara antes que el primero.

Esto debería estar funcionando:

 var btn = document.getElementById("myLink"); btn.onclick = function() { var win = null; // initialize here so it is available in both timeouts setTimeout(function() { win = window.open( // set the value here "http://www.stackoverflow.com", "The new Link") },500); // this should fire first setTimeout(function(){ win.close(); if (win.closed) { clearInterval(timer); winClosed(); alert("'The new Link' window closed !"); } }, 1500); // this should fire second }
about 4 years ago · Juan Pablo Isaza Relatório

0

La segunda devolución de llamada de setTimout se ejecutará antes que la primera, como lo hizo usted. Una forma de resolver este problema es agregar el segundo setTimeout dentro del primero, así:

 let btn = document.getElementById("myLink"); btn.onclick = function () { setTimeout(function () { let win = window.open("http://www.stackoverflow.com", "The new Link"); let timer = setTimeout(function () { win.close(); if (win.closed) { clearInterval(timer); //winClosed(); //alert("'The new Link' window closed !"); } }, 1000); }, 500); };
about 4 years ago · Juan Pablo Isaza 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