-1

如何在以下代码中在窗口名称中使用我的 rand:

var rand = 185656;
setTimeout("win+rand+2 = window.open('url'+secid , '_blank')",2000);

+rand+ 不工作

4

6 回答 6

2

不要将字符串传递给setTimeout. 而是传递一个函数并在 上显式设置您的全局属性window,这将允许您使用方括号表示法:

setTimeout(function () {
    window["win" + rand + "2"] = window.open("url" + secid, "_blank");
}, 2000);

不将字符串传递给setTimeout(or setInterval) 的原因是它是 的别名eval,这可能很危险。

您当前拥有的内容将产生参考错误。它实际上就像这样做,这显然永远不会起作用:

"a" + "b" = "c"; // ReferenceError: Invalid left-hand side in assignment
于 2013-03-28T11:44:46.013 回答
1

它必须在引号之外。

setTimeout("win"+rand+"2 = window.open('url'+secid , '_blank')",2000);
于 2013-03-28T11:42:58.753 回答
1

您需要再次“打开”和“关闭”字符串:

setTimeout("win" + rand + "2 = window.open('url'" + secid + " , '_blank')",2000);

有关非常基础的信息,请参阅这篇文章

除此之外,您不应该将可执行代码传递给setTimeout(它将得到eval'd),请使用函数引用或匿名函数来执行此操作。

此外,像这样构造 var 名称也是一个坏主意。为此查看对象和键。

你可以这样做:

setTimeout(function(){
    var rand = 185656;
    window['win' + rand + '2'] = window.open('url'+secid , '_blank'); //creates a global variable by adding a property to the global object
}, 2000);
于 2013-03-28T11:43:12.423 回答
1

首先,不要将字符串传递给 setTimeout。请改用回调函数。然后变量必须在要连接的字符串(引号)之外:

var rand = 185656;
setTimeout(function() {
    window["win" + rand + "2"] = window.open('url'+secid , '_blank');
}, 2000);
于 2013-03-28T11:44:51.720 回答
0

可能是报价有问题

setTimeout("win"+parseInt(rand)+"2 = window.open('url'+secid , '_blank')",2000);
于 2013-03-28T11:44:17.623 回答
0

setTimeout("win" + rand + "2 = window.open('url'+secid , '_blank')",2000);

于 2013-03-28T11:44:57.513 回答