有谁能告诉我为什么这不起作用?
function changeBG(element_id){
document.getElementById(element_id).className= "arrowActive";
setTimeout("document.getElementById("+element_id+").className= 'arrow'", 300);
}
在firebug中,我收到错误消息,说明传递给setTimeout()的element_id未定义。
答案 0 :(得分:5)
变量element_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);
}
应该注意的是,将代码传递给字符串是not recommended。
答案 1 :(得分:2)
尝试:
setTimeout("document.getElementById('" + element_id + "').className= 'arrow'", 300);
请注意,我在您传递给getElementById
的字符串参数中添加了引号。
答案 2 :(得分:2)
执行此操作的最佳方法是使用闭包
function changeBG(element_id)
{
var elem = document.getElementById(element_id);
elem.className= "arrowActive";
setTimeout( function(e)
{
return function()
{
e.className = 'arrow';
}
}( elem ), 300);
}