函数setTimeout抛出错误

时间:2013-01-26 23:48:49

标签: javascript variables settimeout

我遇到了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行有效,我真的不知道问题是什么。你有什么建议吗?

3 个答案:

答案 0 :(得分:5)

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

你应该使用一个闭包:

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

}, 300);

答案 1 :(得分:4)

您可以尝试使用此表单将参数传递给setTimeout函数:

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

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

Passing parameters to a function called with setTimeout

答案 2 :(得分: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() - 线程中,否则它将无法顺利运行。