problème avec for [Javascript] - HTML/CSS - Programmation
Marsh Posté le 24-05-2005 à 19:55:00
Problème de scope : tu met dans le onclick une fonction, où figure ta variable i, qui est locale au for. Donc une fois le for effectué, i va valoir 10. Et donc dans l'appel du onclick, ce sera toujours 10... Faut bricoler avec un eval je crois, fouille sur ce forum, ça a été donné
Marsh Posté le 24-05-2005 à 22:42:11
Je suis totalement noob en javascript(mais je me documente plein), et donc je comprend pas pourquoi le i est "local" au for puisque
1)liens[i] il "marche" correctement
2)Je crois(mais je me trompe pe) que la ligne avec le [i-1] est dans le for au m^me titre que le lien[i]?
Je dois sans doute mal interpreter le fonctionnment de la boucle "for"(surtout le "2)" ).Je précise que je me débrouille en VB et C++ donc c'est pas que je comprend pas le fonctionnement global d'une boucle for, mais plus le fonctionnment en JS.
Marsh Posté le 24-05-2005 à 22:58:47
Comme dit, au moment où le onclick sera appellé, il tombera sur cette ligne :
teste.firstChild.nodeValue = document.getElementById('galerie_mini').getElementsByTagName('img')[i-1].alt ; |
Note qu'il verra un i, il ne verra pas un nombre genre 1, 2, 3... Donc il remplaçera le i par sa valeur, qui à ce moment sera 10.
Marsh Posté le 27-05-2005 à 14:31:16
Ahhhh je commence a comprendre.Merci.
Par contre j'ai cherché "eval" et j'ai rien troiuvé qui m'intéresserait. Est ce que c'est techniquement possible d'associer au click sur le lien i une variable qui corespondrait à l'index du lien clické(i) ?
Marsh Posté le 24-05-2005 à 19:51:11
Hello,
VOilà, j'ai repris un tutoriel d'alsacreations et j'essaie de le modifier. Mon problème se situe dans le for au niveau du "teste.firstChild.nodeValue = document.getElementById('galerie_mini').getElementsByTagName('img')[i-1].alt"
: le i-1 vaut TOUT le temps sa valeur maximale (10), comme si il était après le for(mais pas dedans).Je voudrais que quand on clic sur le lien i, teste prenne la valeur alt de l'image i et pas de l'image 10
function displayPics()
{
var photos = document.getElementById('galerie_mini') ;
// On récupère l'élément ayant pour id galerie_mini
var liens = photos.getElementsByTagName('a') ;
var descri = document.getElementById('galerie_mini').getElementsByTagName('img').alt ;
// On récupère dans une variable tous les liens contenu dans galerie_mini
var big_photo = document.getElementById('big_pict') ;
// Ici c'est l'élément ayant pour id big_pict qui est récupéré, c'est notre photo en taille normale
var titre_photo = document.getElementById('photo').getElementsByTagName('dt')[0] ;
// Et enfin le titre de la photo de taille normale
var teste= document.getElementById('description') ; //MODIF
// Une boucle parcourant l'ensemble des liens contenu dans galerie_mini
for (var i = 0 ; i < liens.length ; ++i) {
// Au clique sur ces liens
liens[i].onclick = function() {
big_photo.src = this.href; // On change l'attribut src de l'image en le remplaçant par la valeur du lien
big_photo.alt = this.title; // On change son titre
titre_photo.firstChild.nodeValue = this.title; // On change le texte de titre de la photo
teste.firstChild.nodeValue = document.getElementById('galerie_mini').getElementsByTagName('img')[i-1].alt ;//MODIF
return false; // Et pour finir on inhibe l'action réelle du lien
};
}
}
window.onload = displayPics;
// Il ne reste plus qu'à appeler notre fonction au chargement de la page
Ca doit etre du javascript tout bete mais je comprend pas.