Javascript:连续打开窗口问题
这是我的html:Javascript:连续打开窗口问题,javascript,firefox,Javascript,Firefox,这是我的html: <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Something</title> </head> <body> <a href="http://www.google.com">Try Me!</a> <script src="h
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Something</title>
</head>
<body>
<a href="http://www.google.com">Try Me!</a>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
<script>
$("a").click(function(event){
for(id=0;id<=10;id++){
setTimeout(function() {
var local_id = id;
window.open("http://www.mysite.com/characterID="+local_id,"", "win"+local_id, "width=100,height=100,resizable");
}, 3000*id);
}
event.preventDefault();
});
</script>
</body>
</html>
某物
$(“a”)。单击(函数(事件){
对于(id=0;id这是一个典型的JavaScript闭包问题。匿名函数使用的值id
,在循环结束时设置为11。要解决此问题,您需要创建一个返回函数的函数(该函数将围绕id
值闭包)
试着这样做:
$("a").click(function(event) {
var timeout = function(local_id){
return function(){
window.open("http://www.mysite.com/characterID=" + local_id, "", "win" + local_id, "width=100,height=100,resizable");
};
};
for (id = 0; id <= 10; id++) {
setTimeout(timeout(id), 3000 * id);
}
event.preventDefault();
});
$(“a”)。单击(函数(事件){
变量超时=函数(本地\u id){
返回函数(){
窗口打开(“http://www.mysite.com/characterID=“+local_id,”,“win”+local_id,“宽度=100,高度=100,可调整大小”);
};
};
对于(id=0;id这是一个典型的JavaScript闭包问题。匿名函数使用的值id
,在循环结束时设置为11。要解决此问题,您需要创建一个返回函数的函数(该函数将围绕id
值闭包)
试着这样做:
$("a").click(function(event) {
var timeout = function(local_id){
return function(){
window.open("http://www.mysite.com/characterID=" + local_id, "", "win" + local_id, "width=100,height=100,resizable");
};
};
for (id = 0; id <= 10; id++) {
setTimeout(timeout(id), 3000 * id);
}
event.preventDefault();
});
$(“a”)。单击(函数(事件){
变量超时=函数(本地\u id){
返回函数(){
窗口打开(“http://www.mysite.com/characterID=“+local_id,”,“win”+local_id,“宽度=100,高度=100,可调整大小”);
};
};
对于(id=0;id而言,这是一个常见问题
您正在覆盖循环中的local\u id
,并且在代码运行时总是引用相同的变量。这是因为JavaScript没有块作用域,只有函数作用域
因此,要定义id
,需要调用函数,并在其中定义变量(或函数参数)
函数createWindow(本地\u id){
setTimeout(函数(){
窗口打开(“http://www.mysite.com/characterID=“+local_id,”,“win”+local_id,“宽度=100,高度=100,可调整大小”);
},3000*本地标识);
}
对于(id=0;id而言,这是一个常见问题
您正在覆盖循环中的local\u id
,并且在代码运行时总是引用相同的变量。这是因为JavaScript没有块作用域,只有函数作用域
因此,要定义id
,需要调用函数,并在其中定义变量(或函数参数)
函数createWindow(本地\u id){
setTimeout(函数(){
窗口打开(“http://www.mysite.com/characterID=“+local_id,”,“win”+local_id,“宽度=100,高度=100,可调整大小”);
},3000*本地标识);
}
对于(id=0;id这是因为当id设置为11时,在循环退出后调用了var local_id=id;
试试这个:
for(id=0;id<=10;id++){
setTimeout('window.open("http://www.mysite.com/characterID='+id+'","win'+id+'","width=100,height=100,resizable")', 3000*id);
}
for(id=0;id这是因为当id设置为11时,在循环退出后调用var local_id=id;
试试这个:
for(id=0;id<=10;id++){
setTimeout('window.open("http://www.mysite.com/characterID='+id+'","win'+id+'","width=100,height=100,resizable")', 3000*id);
}
for(id=0;id您可以将id作为附加参数传递给setTimeout,如下所示:(这本质上是@mrk的答案,没有那么邪恶。)
您可以将id作为一个附加参数传递给setTimeout,如下所示:(这本质上是@mrk的答案,没有那么邪恶。)
很多年后,我想回答我自己的问题。我记不起我想做什么,但我的解决方案应该是使用let
notvar
let
是范围有界的,而var不是
for(id=0;id<=10;id++){
let local_id = id;
setTimeout(function() {
console.log(local_id)
}, 3000);
}
for(id=0;id多年后,我想回答我自己的问题。我记不起我想做什么,但我的解决方案应该使用let
notvar
let
是范围有界的,而var不是
for(id=0;id<=10;id++){
let local_id = id;
setTimeout(function() {
console.log(local_id)
}, 3000);
}
for(id=0;idGah,这就是手头没有一些不太酷的浏览器可供测试的原因:/Gah,这就是手头没有一些不太酷的浏览器可供测试的原因:/