Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème d'evenemnt javascript

Pour un lightbox

Sujet résolu
    6 avril 2009 à 21:32:22

    Bonjour tout le monde. Pour faire un lightbox, j'ai besoin de scanner les images d'une page pour d'y insérer un évènement 'onclick="..."'. Mais je rencontre un petit problème.
    Voila mon début de code :
    function addEvent(obj,event,fct){
         if(obj.attachEvent)
            obj.attachEvent('on' + event,fct);
         else
            obj.addEventListener(event,fct,true);
    }
    
    // Au chargement
    window.onload = function () {
    	var sImg = document.getElementsByTagName('img');
    	var n = sImg.length;
    
    	// On scan toutes les <img...
    	for (i=0; i<n; i++) {
    
    		var obj = sImg[i];
    		
    		// On définit l'action pour chaque
    		addEvent(obj,'click',function (){sLight(obj)});
    		
    		document.getElementById('test').innerHTML += obj.src+'<br>';
    	}
    }
    
    function sLight(sUrl) {
    	alert(sUrl.src);
    }
    

    Quand je clic sur une image, l'alert ce fait bien, mais il m'affiche toujours l'url de la dernière image.
    J'ai essayer de remplacer le obj (le dernier) de la ligne "addEvent(obj,'click',function (){sLight(obj)});" par un this, ça fonctionne sous Firefox, mais pas sous IE.
    Sinon, dans mon div test, toutes les urls s'affichent correctement.
    J'ai retourner le problème dans tout les sens, mais je ne vois pas d'où ça viens.
    Si vous pouvez me mettre sur une piste.
    Merci beaucoup.
    • Partager sur Facebook
    • Partager sur Twitter
      7 avril 2009 à 0:11:43

      Essaie ceci :

      addEvent(obj,'click',(function (objet){
        return function() {
          sLight(objet)
        };
        })(obj));
      


      EDIT : Ah oui exact ! ^^ faute de frappe.
      • Partager sur Facebook
      • Partager sur Twitter
        7 avril 2009 à 0:41:49

        Golmote, tu as une parenthèse fermante en trop juste avant le premier point-virgule ;)

        Et pour comprendre pourquoi ça marche, rendez-vous ici => Les closures en Javascript
        • Partager sur Facebook
        • Partager sur Twitter
          7 avril 2009 à 0:45:58

          Super, ça fonctionne (sans la parenthèse). Je sens que je vais avoir un peu de lecture. Merci beaucoup.
          • Partager sur Facebook
          • Partager sur Twitter

          Problème d'evenemnt javascript

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown