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

Le
FLaplante
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é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

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!
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
ASM
Le #740369

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é

richard
Le #755348
On 12 mai, 19:40, FLaplante
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

Publicité
Poster une réponse
Anonyme