2010-07-22 8 views
0

Jetez un coup d'oeil sur ce simple exempleparamètres Passing aux fonctions d'événements

<input type="button" value="btn1" id="btn1" /> 
<input type="button" value="btn2" id="btn2" /> 
<input type="button" value="btn3" id="btn3" /> 
<input type="button" value="btn4" id="btn4" /> 
<input type="button" value="btn5" id="btn5" /> 

<script> 
    for (i=1; i<5; ++i){ 
     var btn = document.getElementById('btn' + i); 
     btn.onmouseover = function(){ 
      alert(i); 
     } 
    } 
</script> 

j'attendre devrait alertes par exemple 1 quand je déplace ma souris sur btn1, mais malheureusement, il alerte 5 du tout!

Comment puis-je passer des variables de la boucle à la fonction?

Répondre

3

Ceci est le problème de la boucle de fermeture. Tous les mouseovers se referment sur la même variable, puisque JavaScript n'a que la portée de la fonction. Vous pouvez le réparer en créant une nouvelle fonction, et donc une nouvelle portée.

for (i=1; i<5; ++i){ 
    (function(i) 
    { 
     var btn = document.getElementById('btn' + i); 
     btn.onmouseover = function(){ 
      alert(i); 
     } 
    })(i); 
} 
+0

Dieu vous bénisse! merci :-) – Ehsan

+0

@Ehsan Notez que le paramètre formel «i» et le «i» dans le corps de la fonction sont différents du «i» initialisé dans l'instruction «for» et transmis dans la fonction en tant que paramètre réel. –

+0

Je sais, merci. Au cours des 10 dernières années, c'est une question dans mon esprit, mais je n'ai pas de réponse pour le moment! Chaque fois que je frappe ce mur, je le résous de manière désagréable. Passez une bonne journée :-) – Ehsan

Questions connexes