0

我对 setTimeout 函数有疑问。这是代码:

1   var urlArray = ["pic1.gif"; "pic2.gif"]

2   function changeBackground(elementId, backgroundImage){
3       document.getElementById(elementId).style.background="url("+backgroundImage+")";
4   }

5   function mouseover_1(elementId){
6           changeBackground(elementId,urlArray[0]);
7           setTimeout("changeBackground(elementId,urlArray[1])",300);
8   }

在体内:

<area shape="rect" coords="0,0,95,91" onMouseOver="mouseover_1('navigator_1')">

现在,Javascript 代码中的第 6 行就像一个魅力(图片改变了!),但第 7 行不起作用(图片没有改变)。这是在 Firefox 中调试的错误:

elementId is not defined  line: 7

但是由于第 6 行有效,我真的不知道问题出在哪里。你有什么建议吗?

4

3 回答 3

5

如果将字符串传递给setTimeout,则不会在函数的上下文中评估该字符串(因此elementId不存在)。

您应该改用闭包:

setTimeout(function()
{
    changeBackground(elementId, urlArray[1]);

}, 300);
于 2013-01-26T23:50:14.890 回答
4

您可以尝试使用这种形式将参数传递给 setTimeout 函数:

setTimeout(changeBackground, 300, elementId, urlArray[1]);

在这里你可以看到其他形式来做同样的事情:

将参数传递给使用 setTimeout 调用的函数

于 2013-01-26T23:55:57.520 回答
0

读完后: http: //www.makemineatriple.com/2007/10/passing-parameters-to-a-function-called-with-settimeout

...我了解到需要“parameter = null”并最终实现了一个闭包:

setTimeout(function(){changeBackground(elementId,urlArray[1]);
    parameter = null},300);

但是函数 setTimeout() 必须始终包裹在一个 setInterval() 线程中,否则它将无法顺利运行。

于 2013-01-27T01:55:58.567 回答