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

takinelinfo Messages postés 13 Date d'inscription mardi 24 avril 2007 Statut Membre Dernière intervention 1 juillet 2008 - 1 juil. 2008 à 21:02
ralecul Messages postés 111 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 1 août 2008 - 2 juil. 2008 à 18:43
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

cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
2 juil. 2008 à 10:19
Bonjour,

comme nous a montré petoleTeam :

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

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
0
ralecul Messages postés 111 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 1 août 2008
2 juil. 2008 à 18:43
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...
0
Rejoignez-nous