Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

besoin d'aide pour un problème javascript...

2 réponses
Avatar
FLaplante
Bonjour,
j'ai un petit probl=E8me que je dois r=E9gler rapidement... j'ai un
exemple simple de ce que je veux faire.

J'ai des champs qui sont g=E9n=E9r=E9s dynamiquement. Lors de l'ex=E9cution=
de
la fonction, les champs existent. Est-ce qu'il y a une mani=E8re que la
fonction onclick que je cr=E9=E9 affiche la string "champ1"... Voici un
exemple de code qui reproduit un peu ce que ca doit faire :

function addOnClick(){
for(i=3D1;i<=3D5;i++){
var champ =3D 'champ'+ i;
document.getElementById(champ).onclick =3D function(){alert(champ);};
}
}
//la valeur i =3D 5 apr=E8s la boucle...

Lorsque le click ensuite dans le champ ayant l'id "champ1" par
exemple, ca m'affiche "champ5", parce que la valeur de la variable i
est rendu =E0 5. J'ai essay=E9 de faire :

var champ =3D String('champ'+i);

Mais ca ne fonctionne pas plus... est-ce qu'il y a une mani=E8re de le
faire ??
Ma fonction est plus complexe que cet exemple, mais ca reproduit mon
probl=E8me. je ne peux pas par exemple faire function()
{alert('champ'+i);}...

Est-ce que quelqu'un peut me dire ce qui cloche ???

Merci!

2 réponses

Avatar
ASM

J'ai des champs qui sont générés dynamiquement. Lors de l'exécution de
la fonction, les champs existent. Est-ce qu'il y a une manière que la
fonction onclick que je créé affiche la string "champ1"... Voici un
exemple de code qui reproduit un peu ce que ca doit faire :

function addOnClick(){
for(i=1;i<=5;i++){
var champ = 'champ'+ i;
document.getElementById(champ).onclick = function(){alert(champ);};
}
}
//la valeur i = 5 après la boucle...


function addOnClick(){
for(var i=1; i<=5; i++)
{
document.getElementById('champ'+i).onclick = function(){
alert(this.id);
};
}
}

Est-ce que quelqu'un peut me dire ce qui cloche ???


Tu as bien trouvé ce qui clochait :
tu attibues la même variable à plusieurs fonctions et c'est le dernier
état de cette variable qui sera pris en compte partout.



function $(id) { return document.getElementById(id); }


function addOnClick(){ // variante 1
for(var i=1; i<=5; i++)
$('champ'+i).onclick = Function('alert("champ '+i+'")');
}

function addOnClick(){ // variante 2
for(var i=1; i<=5; i++)
$('champ'+i).onclick = Function('alarm("champ '+i+'");');
}

function alarm(txt) { alert('C'est bien le :n'+txt); }


--
Stephane Moriaux et son (moins) vieux Mac déjà dépassé

Avatar
richard
On 12 mai, 19:40, FLaplante wrote:
Bonjour,
j'ai un petit problème que je dois régler rapidement... j'ai un
exemple simple de ce que je veux faire.

J'ai des champs qui sont générés dynamiquement. Lors de l'exécuti on de
la fonction, les champs existent. Est-ce qu'il y a une manière que la
fonction onclick que je créé affiche la string "champ1"... Voici un
exemple de code qui reproduit un peu ce que ca doit faire :

function addOnClick(){
for(i=1;i<=5;i++){
var champ = 'champ'+ i;
document.getElementById(champ).onclick = function(){ale rt(champ);};
}}

//la valeur i = 5 après la boucle...

Lorsque le click ensuite dans le champ ayant l'id "champ1" par
exemple, ca m'affiche "champ5", parce que la valeur de la variable i
est rendu à 5. J'ai essayé de faire :

var champ = String('champ'+i);

Mais ca ne fonctionne pas plus... est-ce qu'il y a une manière de le
faire ??
Ma fonction est plus complexe que cet exemple, mais ca reproduit mon
problème. je ne peux pas par exemple faire function()
{alert('champ'+i);}...

Est-ce que quelqu'un peut me dire ce qui cloche ???

Merci!


Un conseil general:
il existe des lib JS pour manipuler le dom, sans faire des boucles
pour trouver un element, ou pour le trouver par son id, sa/ses class,
ou meme son nom, par sa position dans le dom, ajouter un evenement ou
une classe à n elements en une seule ligne, et bien d'autres choses.
on gagne un temps fou, on fait moins de faute de frappes, et ca
devient enfin un plaisir de faire du JS

Je peux te conseiller jQuery que j'utilise depuis quelques temps, et
qui se prend en main en 20mn
http://docs.jquery.info

par ailleurs j'espere que tu utilises firebug !

bon courage

RM