IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

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


Sujet :

JavaScript

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 284
    Points : 79
    Points
    79
    Par défaut Gros soucis avec mon onclick. Je n'arrive pas à l'associer à mon élément
    Bonsoir,
    Alors là j'ai un gros soucis avec le js. Tout d'abord voici le code simplifier au maximun:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    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. #2
    Membre expérimenté Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Points : 1 388
    Points
    1 388
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    cell_nom.onclick=function(_id){ 
                              return function(){
                                   processChargeFiche(_id);
                             } 
    }(id);
    Pour que chaque id soit locale à la fonction onclick a laquelle il doit s'appliquer

  3. #3
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Salut,

    L'approche de DoubleU me semble tout a fait pertinente. Cependant elle
    crée autant de fonction qu'il y a d'éléments cliquables ce qui dans ton cas
    n'est pas forcement nécessaire.

    cell_nom.onclick= processChargeFiche;

    permet d'appeler une seule et unique fonction pour tous.

    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    function processChargeFiche() {
      var id = this.id; // permet de récupérer l'id
    }
    Autre remarque, tu "monopolise" le onclick de tous les éléments ce qui le
    rend inexploitable pour d'autre usages futures par d'autres scripts qui pourraient
    en avoir besoin. Plus d'info à ce propos ici

    Encore une autre manière de voir serait d'associer un seul onclick à un parent
    commun, et de détecter l'élément enfant réellement cliqué pour le traiter.
    Si ton code fait plus d'une ligne, c'est que tu as mal choisi ton langage !

Discussions similaires

  1. Gros souci avec gestion des arguments
    Par toams69 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 09/01/2009, 16h59
  2. Soucis avec le OnClick="Submit();" sur un lien hypertexte
    Par ero-sennin dans le forum Langage
    Réponses: 14
    Dernier message: 11/08/2008, 14h54
  3. GROS soucis avec SSL - Apache - Ubuntu ! HELP
    Par satyre dans le forum Sécurité
    Réponses: 1
    Dernier message: 22/05/2007, 13h37
  4. [C#][Visual C# Express] Gros souci avec Excel
    Par poullos dans le forum EDI/Outils
    Réponses: 7
    Dernier message: 18/11/2005, 13h15
  5. Gros soucis avec pgaccess et postgresql
    Par Missvan dans le forum PostgreSQL
    Réponses: 9
    Dernier message: 13/04/2004, 16h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo