Ajout d'un onclick par code

[Résolu]
Signaler
Messages postés
109
Date d'inscription
vendredi 30 janvier 2004
Statut
Membre
Dernière intervention
23 novembre 2010
-
Messages postés
109
Date d'inscription
vendredi 30 janvier 2004
Statut
Membre
Dernière intervention
23 novembre 2010
-
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

7 réponses

Messages postés
1044
Date d'inscription
lundi 7 mars 2005
Statut
Membre
Dernière intervention
13 juillet 2010
7
La fonction eval serait la solution pour se genre de problème.

function debut()
{
for(var i=0;i<=1;i++)
{
qui="a" + tab[i];
x=tab[i];
eval("document.getElementById(qui).onclick=function(){essai(" + x + ")}");
}
}
Messages postés
332
Date d'inscription
mardi 12 juillet 2005
Statut
Membre
Dernière intervention
17 juillet 2010

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.
Messages postés
109
Date d'inscription
vendredi 30 janvier 2004
Statut
Membre
Dernière intervention
23 novembre 2010

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!

taillecrayon
Messages postés
332
Date d'inscription
mardi 12 juillet 2005
Statut
Membre
Dernière intervention
17 juillet 2010

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.
Messages postés
109
Date d'inscription
vendredi 30 janvier 2004
Statut
Membre
Dernière intervention
23 novembre 2010

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

taillecrayon
Messages postés
332
Date d'inscription
mardi 12 juillet 2005
Statut
Membre
Dernière intervention
17 juillet 2010

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>
Messages postés
109
Date d'inscription
vendredi 30 janvier 2004
Statut
Membre
Dernière intervention
23 novembre 2010

Ok, merci, avec ta dernière explication tout est clair. Salut

taillecrayon