11550 sujets

JavaScript, DOM et API Web HTML5

bonjour à tous,

j'ai un petit problème dans une boucle, je crée des liens (onclick) sur des photos (pour voir l'original et pas le thumb) via un script mais le problème c'est que j'ai toujours le lien du dernier tour de boucle (sur tous les liens)

voici le script :

function creatLink() {
   var liens = document.getElementsByTagName('a');
   for (var index = 0; index < liens.length; ++index) {
      var lien = liens[index];
      var image = lien.firstChild;
      if (image.nodeName == "IMG") {
         var source = image.src;
         var resultat = source.replace("thumbs", "originals");
         lien.onclick = function() {
            window.open('popup.php?fichier=' + resultat ,'' ,'toolbar=no, fullscreen=no, scrollbars=no, resizable=no, width=550, height=400,');
            return false;
         }
         
         lien.title = ('photo ' + index + ' - Cliquez pour agrandir');
      }
   }
}


merci d'avance pour votre aide, qui sera la bien venu j'en suis sûr
Bonjour

Si ton tableau de lien est indexé par index (var lien = liens index ) il faut écrire var lien = liens Smiley index

A+
Salut,

C'est un problème typique d'incompréhension du mécanisme de "closures".

Dans la fonction anonyme que tu crées, "resultat" fait référence à la variable locale de ta fonction "creatLink", qui a changé entre temps. Tu peux utiliser la solution suivante, qui devrait en plus t'éviter des problèmes de fuites de mémoire sous IE :
function onClickFn(resultat) {
  return function() {
    window.open('popup.php?fichier=' + resultat ,'' ,'toolbar=no, fullscreen=no, scrollbars=no, resizable=no, width=550, height=400,');
    return false;
  };
}

function creatLink() {

[...]

  lien.onclick = onClickFn(resultat);

[...]

}