2009-03-11 6 views
2

Quelqu'un peut-il me dire pourquoi cela ne fonctionne pas?Fonction La variable passée à setTimeout ne fonctionne pas?

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

En Firebug je reçois une erreur disant que l'on ne définit pas le element_id passé à setTimeout().

Répondre

5

La element_id variable sera une chaîne, de sorte que votre code de délai d'attente ressemblera:

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

Notez que myId devrait être entre guillemets, mais ce n'est pas.

Une meilleure façon est d'utiliser une fermeture, comme ceci:

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

Il convient de noter que le passage du code dans une chaîne est not recommended.

2

Essayez:

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

Notez que j'ai ajouté des guillemets pour le paramètre de chaîne vous passez à getElementById.

2

La meilleure façon de faire est avec une fermeture

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