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

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

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 Report

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 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!