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 :

identifier l'élément qui a reçu le clic


Sujet :

JavaScript

  1. #1
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    521
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 521
    Par défaut identifier l'élément qui a reçu le clic
    Bonjour je crée des div dynamiquement auxquels j'attribue un label mais je veux pouvoir récupérer le label de chaque div créé grâce à createTextNode pour pouvoir exécuter la fonction series en fonction justement de mon label. voici le code qui me permet de créer mes div et de planifier l'évènement qui devra être exécuté lorsqu'on clic sur l'élément li
    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
    for (i=0;i<items.length;i++)
    		{
    				//alert (items.item(i).firstChild.data);	
    		// création des nouveaux noeuds
    			var nouveauLi = document.createElement('li');
    			var nouveauDiv = document.createElement('div');
    			var nouveauLabel = document.createTextNode(items.item(i).firstChild.data);
     
    			 // lui donne un attribut class appelé cliquable défini dans le css  
    			 nouveauDiv.setAttribute("className", "cliquable");//pour IE
    			 nouveauDiv.setAttribute("class", "cliquable"); //pour ff
    			 /*Il n'est pas nécessaire d'ajouter une détection du navigateur ci dessus, le 
    			 code non compris par chacun des navigateurs ne générant pas d'erreur.*/
     
    			 //sur clic des div créés appel de la fonction de création des séries
    			 nouveauLi.onclick = function(){series(4)};//ie et ff
    			 //nouveauDiv.setAttribute("onclick","series("+4+");");//que sur ff
     
    			// raccord des noeuds
    			nouveauDiv.appendChild(nouveauLabel);
    			nouveauLi.appendChild(nouveauDiv);
    			var insertAvantMoi=document.getElementById('series');
    			var parentUl=insertAvantMoi.parentNode;
    			parentUl.insertBefore(nouveauLi, insertAvantMoi);
     
    		}
    quelque soit le nouveauLi cliqué c'est la fonction series(4) qui est déclenchée or je voudrai récupérer le texte ou label de mon div pour déclencher le bon bout de code dans ma fonction series avec un switch case. comment dois-je alors faire pour avoir ce fameux label, texte ou intitulé de mon div?
    Merci

  2. #2
    Membre Expert
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Par défaut
    Salut,

    Pourquoi ne pas faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nouveauLi.onclick = function(){series(nouveauLabel.data)};
    ERE

  3. #3
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    bonjour,

    pour ton problème voici l'explication :
    http://javascript.developpez.com/faq...lick.dynamique


    en passant pourquoi tu te casses la tête avec setAttribute

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    nouveauDiv.setAttribute("className", "cliquable");//pour IE
    nouveauDiv.setAttribute("class", "cliquable"); //pour ff
    écris directement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    nouveauDiv.className = "cliquable";

  4. #4
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    521
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 521
    Par défaut
    cette méthode récupère toujours le même label en l'occurrence le label du dernier div et ceci quelque soit le div sur lequel s'effectue le clic du coup ça ne marche pas comme ça devrait

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    521
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 521
    Par défaut
    je ne me suis pas apperçu du message d'Auteur avant de poster mon précédent message mais quand je lis le code que tu me proposes, je comprends que tout ce joue là sauf que je me pause la question de savoir à quoi correspond indice est-ce un attribut de Dom comme innerHTML?

  6. #6
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Non, il s'agit simplement d'une propriété d'objet JavaScript que tu crées juste pour stocker une valeur (ici, la valeur du compteur au moment de l'affectation).
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  7. #7
    Membre Expert
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Par défaut
    Salut,

    Mille excuses, faute d'attention j'ai écrit une énormité...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nouveauLi.onclick = function(){series(nouveauLabel.data)};
    C'est effectivement le dernier label que tu obtiendras (techniquement javascript garde une référence sur la variable nouveauLabel d'où ce comportement). Il faut donc réussir à découpler cette variable, ce qui se fait par exemple ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     nouveauLi.onclick = (function(label){
                             return function () {
                                 series(label.data);
                             };
                         })(nouveauLabel);
    Bon dev,

    ERE

  8. #8
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    521
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 521
    Par défaut
    Merci emmanuel.remy ça marche quoi que je ne comprenne pas bien la fonction, si tu pouvais m'expliquer de manière détaillé la fonction ça m'aiderai. J'ai essayé de mettre le code de manière linéaire pour mieux comprendre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     nouveauLi.onclick = (function(label){return function () {ajax1(label.data);};})(nouveauLabel);
    je me demande au delà du fait qu'il me faut comprendre toute la fonction pourquoi on a pas un entre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (function(label){return function () {ajax1(label.data);};})
    et

  9. #9
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    521
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 521
    Par défaut
    cette fois-ci je veux récupérer la valeur de l'id du bouton sur lequel j'ai cliqué j'ai bien essayé de m'inspirer des conseils précédents concernant le label mais ça ne marche pas. J'arrive à afficher l'id grâce à ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     nouveauLi.onclick = function(){alert(nouveauLi.getAttribute("id"))};
    mais c'est toujours l'id du dernier element li qui s'affiche.
    Merci

  10. #10
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     nouveauLi.onclick = function(){alert(this.id))};
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  11. #11
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    521
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 521
    Par défaut
    ça marche mais quand j'essaye de faire l'association de la fonction qui récupère le label
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     nouveauLi.onclick = (function(label){
                             return function () {
                                 series(label.data);
                             };
                         })(nouveauLabel);
    avec celle-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     nouveauLi.onclick = function(){alert(this.id))};
    rien ne marche sachant que si je les écrits l'une après l'autre le premier n'est pas prit en compte. Comment donc combiner les deux dans le même évènement

  12. #12
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    oulà ... je penses que tu te compliques l'existence pour pas grand chose ...

    Quel est exactement le but recherché ?
    un coup tu demandes à avoir l'id... une autre fois un label ???
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  13. #13
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    521
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 521
    Par défaut
    j'ai besoin des deux, j'ai une base de données avec des examens de patients et chaque examen à une à plusieurs séries et lorsque je récupère les séries d'un examen grâce à l'id je leur attribut des numéro grâce à une boucle qui parcourt l'ensemble des séries d'un examen comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nouveauLi.setAttribute("id", ""+(i+1));
    en récupérant cet id l'utilisateur pourra voir par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    serie: id/nbTotalseries
    concernant le label c'est l'id de la série dans ma bd donc utile pour récupérer des information sur la série.

  14. #14
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    comme cela t'a déja ete suggéré plsu haut:


    attribution des id et labels:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    nouveauLi.id= 'monid' +(i+1);
    nouveauLi.label = 'label'+i
    recupération :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nouveauLi.onclick=function (){alert(this.id + ' ' +this.label)
    ton onclick=return function() est un peu surrealiste ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  15. #15
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    521
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 521
    Par défaut
    ça marche bien avec ta méthode plutôt que celle de emmanuel.remy

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Identifier l'élément qui enclenche l'événement
    Par abboudi dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 12/11/2014, 10h53
  2. Connaitre l'élément qui a le focus avant un clic bouton
    Par tommyknocker dans le forum GTK+ avec C & C++
    Réponses: 7
    Dernier message: 24/07/2012, 03h12
  3. connaître l'élément qui a reçu le click
    Par sebac dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 10/03/2010, 09h03
  4. [array] supprimer un élément qui n'est pas le dernier
    Par SpaceFrog dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 16/04/2008, 20h41
  5. Récupérer l'id d'un élément qui vient d'être inséré
    Par sg-40 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 18/06/2004, 10h30

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