I try to create a javascript function that, when user clicks on a button, opens a new tab after a small timeframe then wait one second and close it.
Currently, my code looks like this:
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);
}
but the second setTimeout function is not executed.
When I remove one of the two setTimeout function, the other one works fine, but I need to have the two running.
edit: change timeout values to take into account lk77 comment.
>Solution :
There are 2 issues in your code.
- you are initializing the variable
winin the first timeout, meaning it will not be available in the second timeout. You might want to read about closure & scoping in javascript. - Your first timeout has a delay of
1500ms and the second one500, meaning that the second timeout fires before the first one.
This should be working:
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
}