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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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

+ 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