2009-03-11 21 views
2

Kann mir jemand sagen, warum das nicht funktioniert?Funktionsvariable übergeben an setTimeout funktioniert nicht?

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

In firebug erhalte ich eine Fehlermeldung, dass die Element_ID zu setTimeout() übergeben nicht definiert ist.

Antwort

5

Die Variable element_id wird ein String sein, so dass Ihr Code Timeout aussehen wird:

document.getElementById(myId).className = ... 

Beachten Sie, dass myid in Anführungszeichen gesetzt werden sollte, aber es ist nicht.

Eine bessere Möglichkeit ist, einen Verschluß zu verwenden, wie folgt aus:

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

Es sollte beachtet werden, dass der Code in einem String übergeben not recommended ist.

2

Versuchen:

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

Beachten Sie, dass ich Anführungszeichen in den String-Parameter hinzugefügt Sie getElementById vorbei sind.

2

Der beste Weg, dies zu tun ist mit einem Verschluss

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