Javascript 传递给setTimeout的函数变量是否不工作?

Javascript 传递给setTimeout的函数变量是否不工作?,javascript,iphone,html,Javascript,Iphone,Html,有人能告诉我为什么这不起作用吗 function changeBG(element_id){ document.getElementById(element_id).className= "arrowActive"; setTimeout("document.getElementById("+element_id+").className= 'arrow'", 300); } 在firebug中,我收到一个错误,指出传递给setTimeout()的元素id未定义

有人能告诉我为什么这不起作用吗

function changeBG(element_id){
        document.getElementById(element_id).className= "arrowActive";
        setTimeout("document.getElementById("+element_id+").className= 'arrow'", 300);
}
在firebug中,我收到一个错误,指出传递给setTimeout()的元素id未定义。

请尝试:

setTimeout("document.getElementById('" + element_id + "').className= 'arrow'", 300);

请注意,我在传递给
getElementById

的字符串参数中添加了引号,变量
element\u id
将是一个字符串,因此超时代码如下所示:

document.getElementById(myId).className = ...
请注意,myId应该用引号括起来,但不是

更好的方法是使用闭包,如下所示:

function changeBG(element_id)
{
        var elm = document.getElementById(element_id);
        elm.className = "arrowActive";
        setTimeout(function() { elm.className= 'arrow'; }, 300);
}

应该注意的是,以字符串形式传递代码是非常困难的。

最好的方法是使用闭包

function changeBG(element_id)
{
        var elem = document.getElementById(element_id);
        elem.className= "arrowActive";
        setTimeout( function(e)
        {
                return function()
                {
                        e.className = 'arrow';
                }
        }( elem ), 300);
}