Aller au contenu

Savoir sur quel élément l'utilisateur a cliqué

Noter ce sujet


APZO

Messages recommandés

Membre, Posté(e)
APZO Membre 208 messages
Baby Forumeur‚
Posté(e)

Bonjour,

j'ai une instruction dans mon code javascript qui est la suivante :

for(o in listeGlob){
if(listeGlob[o].type == "folder"){
		document.getElementById(listeGlob[o].id).addEventListener("click", function(e) { this.loadTree(); }, false);
}
}

Elle me permet d'ajouter un listener sur chaque élément d'une certaine liste.

J'aimerais savoir comment je pourrais récupérer l'id de l'élément sur lequel on aurait cliqué.

Cordialement.

Modifié par APZO
Lien à poster
Partager sur d’autres sites

Annonces
Maintenant
Invité Gaetch
Invités, Posté(e)
Invité Gaetch
Invité Gaetch Invités 0 message
Posté(e)

Bin t'utilises 'this' dans ta fonction. This fera référence à l'élément auquel tu as lié ton listener.

Lien à poster
Partager sur d’autres sites

Membre, Posté(e)
APZO Membre 208 messages
Baby Forumeur‚
Posté(e)

D'accord, en fait ce serait :

document.getElementById(listeGlob[o].id).addEventListener("click", function(e) { this.loadTree(this.id); }, false);

Modifié par APZO
Lien à poster
Partager sur d’autres sites

Invité Gaetch
Invités, Posté(e)
Invité Gaetch
Invité Gaetch Invités 0 message
Posté(e)

Je comprneds pas "this.loadTree". J'aurais dit loadTree(this.id) tout simplement.

Lien à poster
Partager sur d’autres sites

Membre, Posté(e)
APZO Membre 208 messages
Baby Forumeur‚
Posté(e)

En fait c'est parce que j'ai quelque chose de la forme :

var truc = {
...
loadTree: function (id){
  for(o in listeGlob){
  	if(listeGlob[o].type == "folder"){
       	document.getElementById(listeGlob[o].id).addEventListener("click", function(e) {this.loadTree(this.id); }, false);
  	}
  }        	
} ,   
...
}

Modifié par APZO
Lien à poster
Partager sur d’autres sites

Invité Gaetch
Invités, Posté(e)
Invité Gaetch
Invité Gaetch Invités 0 message
Posté(e)

OMG et ça fonctionne ça ??

Lien à poster
Partager sur d’autres sites

Membre, Posté(e)
APZO Membre 208 messages
Baby Forumeur‚
Posté(e)

J'ai pas pu tester encore, qu'est-ce qui ne va pas ?

Il faut peut être mettre :

document.getElementById(listeGlob[o].id).addEventListener("click", function(e) {truc.loadTree(this.id); }, false);

Modifié par APZO
Lien à poster
Partager sur d’autres sites

Invité Gaetch
Invités, Posté(e)
Invité Gaetch
Invité Gaetch Invités 0 message
Posté(e)

je comprends déjà pas la boucle à vrai dire.

et puis tu as une fonction et dedant tu ajoute des listenners qui font appel à cette même fonction !

Lien à poster
Partager sur d’autres sites

Membre, Posté(e)
APZO Membre 208 messages
Baby Forumeur‚
Posté(e)

En fait ailleurs dans le code je fais une requête avec l'objet XMLHttpRequest

Ensuite je récupère le résultat de la requête sous forme d'un tableau grâce à Array(JSON.parse(httpRequest.responseText)) et je met ça dans le tableau listeGlob

Ces réponses sont des éléments avec un id et un type, il se trouve qu'en faisant par exemple listeGlob[0].type j'obtiens le type de l'élément sous forme d'une chaine de caractère.

Et ma boucle consiste à ajouter des click listener uniquement sur les dossiers.

Il n'y a pas de récursivité en javascript ??

Je ne l'ai pas mis mais dans loadtree j'ai une méthode qui me permet de faire la requête, donc je rappelle loadTree pour faire une requête sur une autre URL (qui dépend justement de l'id du dossier sur lequel on a cliqué)

Modifié par APZO
Lien à poster
Partager sur d’autres sites

Invité Gaetch
Invités, Posté(e)
Invité Gaetch
Invité Gaetch Invités 0 message
Posté(e)

Ta fonction loadTree elle est sensée faire quoi ?

Parce que là la fonction loadTree parcourt des éléments pour leur ajouter un listener sur le click qui... appelle la fonction loadTree... c'est le serpent qui se mord la queue quoi...

Et ma boucle consiste à ajouter des click listener uniquement sur les dossiers.
Oui mais qui sont sensés appeler quelle action au clic c'est ça le truc ???
Lien à poster
Partager sur d’autres sites

Membre, Posté(e)
APZO Membre 208 messages
Baby Forumeur‚
Posté(e)

Voici le code complet :

loadTree: function (id)
{
   	if(id != undefined)
       	nodeId = "/"+id;
  	this.loadUrl("www.banane.com/"+nodeId); 		
   	if( this.url == '' ){
       	alert("Impossible de charger la liste des scénarios.");
       	window.close();
   	}
   	else{
       	this.request(this.url, this.afficherScenarios, "JSON");
       	/*Faire une boucle pour ajouter des clic listener sur chaque dossier*/
       	for(o in listeGlob){
               	if(listeGlob[o].type == "folder"){
                   	document.getElementById(listeGlob[o].id).addEventListener("click", function(e) { truc.loadTree(this.id); }, false);
               	}
       	}        	
}	
}

Modifié par APZO
Lien à poster
Partager sur d’autres sites

Invité Gaetch
Invités, Posté(e)
Invité Gaetch
Invité Gaetch Invités 0 message
Posté(e)

Ok en fait c'est comme un explorateur de dossiers, tu cliques sur un dossier et ça le déploie et ça rappelle la fonction sur les sous dossiers c'est ça ?

Lien à poster
Partager sur d’autres sites

Invité Gaetch
Invités, Posté(e)
Invité Gaetch
Invité Gaetch Invités 0 message
Posté(e)

Ok donc en gros il te faut, si je suis ta facon de faire,

une fonction qui à partir d'un chemin te récupère le contenu d'un dossier sous la forme d'un tableau contenant id, nom, type (ficher ou dossier) et chemin, et avec ça te construit une liste en html et t'ajoute les listeners.

le window.onload qui appelle cette fonction avec le chemin "/" (racine) en paramètre qui va donc récupérer le contenu du dossier racine pour commencer.

Lien à poster
Partager sur d’autres sites

Membre, Posté(e)
APZO Membre 208 messages
Baby Forumeur‚
Posté(e)

Tu as répondu à ma question lorsque tu m'as dit qu'il fallait simplement utiliser this.id pour récupérer l'id de l'élément sur lequel on a cliqué, après la fonction se déroule normalement et ça devrait fonctionner. Maintenant je dois tester mais je peux pas le faire pour le moment.

Modifié par APZO
Lien à poster
Partager sur d’autres sites

Invité Gaetch
Invités, Posté(e)
Invité Gaetch
Invité Gaetch Invités 0 message
Posté(e)
Lien à poster
Partager sur d’autres sites

Invité Gaetch
Invités, Posté(e)
Invité Gaetch
Invité Gaetch Invités 0 message
Posté(e)

Je t'en prie :)

Lien à poster
Partager sur d’autres sites

Annonces
Maintenant

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

Chargement
×