我遇到了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行有效,我真的不知道问题是什么。你有什么建议吗?
答案 0 :(得分:5)
如果将字符串传递给setTimeout
,则不会在函数的上下文中计算字符串(因此elementId
不存在)。
你应该使用一个闭包:
setTimeout(function()
{
changeBackground(elementId, urlArray[1]);
}, 300);
答案 1 :(得分:4)
您可以尝试使用此表单将参数传递给setTimeout函数:
setTimeout(changeBackground, 300, elementId, urlArray[1]);
在这里你可以看到其他形式做同样的事情:
答案 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() - 线程中,否则它将无法顺利运行。