taillecrayon
Messages postés109Date d'inscriptionvendredi 30 janvier 2004StatutMembreDernière intervention23 novembre 2010
-
8 juil. 2007 à 14:33
taillecrayon
Messages postés109Date d'inscriptionvendredi 30 janvier 2004StatutMembreDernière intervention23 novembre 2010
-
10 juil. 2007 à 13:08
Bonjour, voila un petit pb que je n'arrive pas à résoudre : debut() est éxécuté au chargement et doit ajouter aux div id "a1" et "a2" un prog essai(1) et essai(2) or pour les deux il ajoute essai(2)
var tab=new Array(1,2)
function debut()
{for(var i=0;i<=1;i++)
{qui="a" + tab[i]
x=tab[i]
document.getElementById(qui).onclick=function(){essai(x)} } }
function essai(x) {alert(x) }
Merci si on peut m'expliquer. taillecrayon
cs_Kysic
Messages postés332Date d'inscriptionmardi 12 juillet 2005StatutMembreDernière intervention17 juillet 2010 8 juil. 2007 à 20:58
Salut, j'ai compris le problème mais j'ai pas la solution.
En fait ton programme ecrit essai(x) pour les deux (il n'évalue pas x quand il l'écrit).
Si j'amais tu fais un x="salut" après, tu verra salut quand tu cliquera sur n'importe lequel des boutons.
Pour résoudre le problème il faudrait donc le forcer à évaluer x, mais là j'ai jamais fait.
Si je trouve je reposte.
taillecrayon
Messages postés109Date d'inscriptionvendredi 30 janvier 2004StatutMembreDernière intervention23 novembre 2010 9 juil. 2007 à 12:32
Merci de vos réponses, ça marche, mais j'aurais bien voulu savoir comment "fonctionne cette erreur" car le x de essai(x) a bien une valeur pour chaque x de la boucle mais le même : celui obtenu dans la dernière boucle!
cs_Kysic
Messages postés332Date d'inscriptionmardi 12 juillet 2005StatutMembreDernière intervention17 juillet 2010 9 juil. 2007 à 12:55
C'est ce que j'ai essayer de t'expliquer, en fait ça fait comme si tu avait:
var tab=new Array(1,2)
for(var i=0;i<=1;i++) {
qui="a" + tab[i]
x=tab[i]
}
function essai(x) {alert(x) }
puis:
au lieu de
alors ta fonction est appelée avec la dernière valeur de x (c'est à dire 2)
en faisant comme là indiqué [auteurdetail.aspx?ID=463723 Arto_8000], ce n'est pas x qui est dans la fonction mais sa valeur (il est évalué), donc il n'y a plus de problème.
Vous n’avez pas trouvé la réponse que vous recherchez ?
taillecrayon
Messages postés109Date d'inscriptionvendredi 30 janvier 2004StatutMembreDernière intervention23 novembre 2010 9 juil. 2007 à 14:57
Effectivement Kysic c'est bien comme ça que cela semble se passer mais pourquoi ce "puis" alors que c'est bien à l'intérieur de la boucle que l'on demande de rajouter le onclick
cs_Kysic
Messages postés332Date d'inscriptionmardi 12 juillet 2005StatutMembreDernière intervention17 juillet 2010 9 juil. 2007 à 15:13
ah, je suis pas doué pour les explications visiblement,
voilà un petit script pour t'aider à comprendre, là on utilise le fait que l'argument est évalué au moment de l'execution (quand on clique) et non au moment ou l'on donne les attributs du onclik.
(a chaque fois que l'on clique on voit le nombre de secondes écoulés depuis le début du script).
<script language="javascript" type="text/javascript">
var secondes = 0;
function message(x) { alert(x) }
function augmenteSecondes () {
secondes++;
setTimeout ("augmenteSecondes()",1000);
}
setTimeout ("augmenteSecondes()",1000);
document.getElementById("a1").onclick=function() { message(secondes); }
</script>