Pb de paramètre avec function(){mafonct(variable);}

Résolu
Messages postés
96
Date d'inscription
mercredi 20 août 2003
Statut
Membre
Dernière intervention
10 février 2011
-
Messages postés
96
Date d'inscription
mercredi 20 août 2003
Statut
Membre
Dernière intervention
10 février 2011
-
Bonjour,

Dans une boucle for, j'affecte à des cellules <td> fraichement créées, une fonction pour l'évenement onclick :

for(i= 0 ; i<nbcellules;i++)
{
TR = tableau.insertRow(i);
TD = document . createElement("td");
TD.innerText =bidule[i];
TD.onclick= function(){ mafonct(i,menusm);};
alert(TD.onclick);
TR.appendChild(TD);
}

et devinez ce que me renvoie la boite d'alert ?

Ceci: function(){mafonct(i,menusm);};

Le problème c'est que : i n'a pas été remplacé par sa valeur !!!

Donc ma question est : comment faire pour que ?

J'ai (naïvement ?) essayé de passer par une chaine de caractères :
chaine ="function(){affiche_menu("+i+",menusm);}";
TD.onclick=chaine;
Mais bien entendu cette horreur ne fonctionne pas (la boite d'alert m'affiche ce que je veux, mais la fonction n'est pas appelée quand on clique)


Merci pour vos réponses

Sapakus

6 réponses

Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Membre
Dernière intervention
30 juillet 2012
42
salut



essai en remaplçant

TD.onclick= function(){ mafonct(i,menusm);};

par


eval("TD.onclick =function(){mafonct("+i+",menusm);};";



In a dream, I saw me, drop dead... U was here, U cried... It was just a deam, if I die, U won't cry, maybe, U'll be happy

http://coucou747.hopto.org
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
Bonjour,

colonne dans tableau.setAttribute
("onclick",function(){nom de la fonction(paramètres);});

et j'éviterais TR et TD comme variables...

Cordialement. Bul. ~Site~~[mailto:marcelBultez@tiscali.fr Mail]~
Messages postés
96
Date d'inscription
mercredi 20 août 2003
Statut
Membre
Dernière intervention
10 février 2011
3
Alleluia !

Avec eval, ça marche ! Je ne connaissais pas cette fonction.(bien pratique, je dois dire)

En revanche, on a le même problème en utilisant setAttribute.

Par contre, il faut avouer que mes variables TD et TR sont, en effet,
spécialement vilaines !

Merci à vous deux, pour vos réponses, inespérées, un lundi de Pâques !

Sapakus
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
pourtant aucune raison que cela ne
marche pas : c'est ce que j'utilise
voir ma source "traitements sur les tableaux"
sur ce site.
Cordialement. Bul. ~Site~~[mailto:marcelBultez@tiscali.fr Mail]~
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Membre
Dernière intervention
30 juillet 2012
42
fais réponse accèptée stp

In a dream, I saw me, drop dead... U was here, U cried... It was just a deam, if I die, U won't cry, maybe, U'll be happy

http://coucou747.hopto.org
Messages postés
96
Date d'inscription
mercredi 20 août 2003
Statut
Membre
Dernière intervention
10 février 2011
3
Bultez,
dans ta source 'traitement des tableaux' on trouve effectivement dans la fonction ajout(), cette ligne :
tableau.rows(l).cells(Number(adr.value)+1).setAttribute("onclick",function(){ColonneChoix(this);});

En effet, dans ce cas, cela fonctionne car le paramètre de ColonneChoix est this ! Donc inutile qu'il soit remplacé par quoique ce soit. Dans mon cas, je veux qu'à chaque tour de boucle, le paramètre change.

c à d :
i= 0 ---> function (){ mafonct(0,menusm);};
i =1 --->
function(){mafonct(1,menusm);};
i= 2 --->
function (){ mafonct(2,menusm);};

etc..

Or que j'utilise : maligne.onclick =function(){mafonc(i)}; ou maligne.setAttribute("onclick",function(){mafonc(i)};);, le problème est le même : i n'est pas remplacé par 0,1,2,...
Et quand je demande l'affichage de l'attribut onclick j'obtiens toujours : function(){mafonc(i)};); Je ne sais pas pourquoi dans ce cas précis l'interpréteur javascript ne voit pas que i est une variable (peut-être est-ce propre à IE) , j'aurais pu le remplacer par choucroute garnie que ça aurait été pareil !

Enfin bref, heureusement, avec eval j'arrive à me tirer d'affaire.

Coucou747, ta réponse est validée depuis 16h12.

Merci encore à tous les deux.

Sapakus