Gros soucis avec mon onclick. Je n'arrive pas à l'associer à mon élément

Signaler
Messages postés
13
Date d'inscription
mardi 24 avril 2007
Statut
Membre
Dernière intervention
1 juillet 2008
-
Messages postés
111
Date d'inscription
dimanche 23 mars 2003
Statut
Membre
Dernière intervention
1 août 2008
-
Bonsoir,
Alors là j'ai un gros soucis avec le js. Tout d'abord voici le code simplifier au maximun:

function ChargeListeAcheteur()
{
    var reponseXml   = xmlHttpListeAcheteur.responseXML;
    var rootXmlElement = reponseXml.documentElement;
 
     var divParent=document.getElementById('acheteur_bloc_resultat_liste');
     divParent.innerHTML="";
 
     var table = document.createElement('table');
 
     for(var i=0; i<(rootXmlElement.childNodes[1].childNodes).length;i++)
     {
          var id = rootXmlElement.childNodes[1].childNodes[i].childNodes[0].firstChild.data;
          var ligne = table.insertRow(-1);
          cell_nom = ligne.insertCell();
          cell_nom.innerHTML=rootXmlElement.childNodes[1].childNodes[i].childNodes[1].firstChild.data;
 
          alert(id);
          cell_nom.onclick=function(){ processChargeFiche(id); };    
     }
     divParent.appendChild(table);
}



function processChargeFicheAcheteur(elemt)
{
     alert(elemt);
}


C'est très simple, je construit une liste de membre en ajax, et je voudrais associer une fonction à l'évènement onclick pour chaques individu afin de visualiser sa fiche.
Imaginons 3 membres, je voudrais



membre 1 -> id=1 -> onclick=processChargeFiche('1');
membre 2 -> id=2 -> onclick=processChargeFiche('2');
membre 3 -> id=6 -> onclick=processChargeFiche('6');


Mon premier alert est la pour vérifier si j'ai les bon id, j'obtiens:
1
2
6
-> ok


par contre ils ont tous onclick=processChargeFiche('6');, il prend en compte le dernier id pour tous les membres, c'est à dire que quelque soit le membre sur lequel je clique, je vois systematiquement la fiche du dernier membre.
J'obtiens donc à l'écran:
6
6
6



J'ai essayé:

cell_nom.onclick="processChargeFiche(id)";
cell_nom.onclick="processChargeFiche("+id+")";
J'ai essayé avec une variable superglobale mais sans succés.

2 réponses

Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
34
Bonjour,

comme nous a montré petoleTeam :

    cell_nom.nimporte=id;
    cell_nom.onclick=function()
    { processChargeFiche(this.nimporte); };   

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
Messages postés
111
Date d'inscription
dimanche 23 mars 2003
Statut
Membre
Dernière intervention
1 août 2008

Salut,

Au cas ou tu raterais la réponse de l'autre post (http://www.javascriptfr.com/infomsg_PROBLEME-ASSOCIER-FONCTION-ONCLICK_1163728.aspx).

Voici la solution la plus propre (qui n'ajoute pas d'attribut à l'élément).
cell_nom.onclick=funtion(index) { return function() { processChargeFiche(index); }(id);
Cette technique utilise une closure (voir google pour comprendre)

@+

PS: la réponse de l'autre post fonctionne, en revanche je n'ai pas pu tester celle-ci...