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 :

Détecter clic sur un div ou l'un de ces enfants


Sujet :

JavaScript

  1. #1
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2008
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2008
    Messages : 231
    Points : 82
    Points
    82
    Par défaut Détecter clic sur un div ou l'un de ces enfants
    Bonjour à tous,

    J'ai une série de div contenant différentes informations et cela ressemble à peu de chose prêt à ça :

    Code html : 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
    <div id="stock_search-form-item">
        <div class="center mbl" id="listresult">
            <div data-itmref="ref01">titre</div>
                <div class="col-2" data-itmref="ref01">
    	            <p class="txt-size-0-8 no-padding" data-itmref="ref01">ref01 - des</p>
                        <p class="txt-size-0-8 no-padding" data-itmref="ref01">eancode - votre code autre ref</p>
                </div>
            </div> 
            <div data-itmref="ref02">titre</div>
                <div class="col-2" data-itmref="ref02">
    	            <p class="txt-size-0-8 no-padding" data-itmref="ref02">ref01 - des</p>
                        <p class="txt-size-0-8 no-padding" data-itmref="ref02">eancode - votre code autre ref</p>
                </div>
                [...]
            </div>
        </div>
    </div>


    Côté javascript :

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    document.addEventListener('click', e => {            
        if(e.target && e.target.id == 'stock_search-form-item' || e.target.parentElement.id == 'stock_search-form-item') {
            adv.searchItmSetItem(e)
        }
    })

    Je cherche une solution pour détecter le clic sur un des div sous l'id "listresult" ou des enfants de ces div contenant pour récupérer la valeur de data-itmref. Avec mon code cela marche que si le div contient un seul niveau de balise enfant. Comment faire pour avoir le même comportement mais peut importe le niveau cliqué ?

    Merci d'avance.
    Philippe.

  2. #2
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2008
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2008
    Messages : 231
    Points : 82
    Points
    82
    Par défaut
    Après d'autres recherches j'arrive à ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            let containingElement = document.querySelector('#listresult')
            document.body.addEventListener('click', function(event) {
                if(containingElement.contains(event.target)) {
                    adv.searchItmSetItem(event)
                }
            })

  3. #3
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 112
    Points
    44 112
    Par défaut
    Bonjour,
    regarde du côté de Element.closest()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    document.addEventListener('click', e => {
      const elem = e.target;
      const parent = elem.closest("#stock_search-form-item");
      if (parent) {
        console.log("Bingo !!!", elem, parent);
      }
    })

  4. #4
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2008
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2008
    Messages : 231
    Points : 82
    Points
    82
    Par défaut
    Bonjour,

    Désolé de ma réponse tardive.

    J'ai testé ta solution et en fait je me suis rendu compte que j'ai fais une erreur lorsque j'ai écris mon 1er message sur la partie HTML.

    Code html : 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
    <div id="listresult" class="center">
    	<div data-itmref="ref01" id="stock_search-form-item">
    		<div data-itmref="ref01">aaaaa</div>
    		<div data-itmref="ref01"><img src="...." data-itmref="ref01"></div>
    		<div data-itmref="ref01">
    			<p data-itmref="ref01">ref01 - désignation</p>
    			<p data-itmref="ref01">xxxxx - votre code </p>
    		</div>
    	</div>
    	<div data-itmref="ref02" id="stock_search-form-item">
    		<div data-itmref="ref02">bbbbb</div>
    		<div data-itmref="ref02">
    			<p data-itmref="ref02">ref02 - désignation</p>
    			<p data-itmref="ref02">xxxxx - votre code </p>
    		</div>
    	</div>
    [...]
    </div>

    Du coups il y a un problème avec tout les div "container" ont le même id, j'ai contourner ça en ajoutant automatiquement un id pour arriver à ce code

    Code html : 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
    <div id="listresult" class="center">
    	<div data-itmref="ref01" id="stock_search-form-item-0">
    		<div data-itmref="ref01">aaaaa</div>
    		<div data-itmref="ref01"><img src="...." data-itmref="ref01"></div>
    		<div data-itmref="ref01">
    			<p data-itmref="ref01">ref01 - désignation</p>
    			<p data-itmref="ref01">xxxxx - votre code </p>
    		</div>
    	</div>
    	<div data-itmref="ref02" id="stock_search-form-item-1">
    		<div data-itmref="ref02">bbbbb</div>
    		<div data-itmref="ref02">
    			<p data-itmref="ref02">ref02 - désignation</p>
    			<p data-itmref="ref02">xxxxx - votre code </p>
    		</div>
    	</div>
    [...]
    </div>

    Mais du coups plus moyen de limiter par l'id pour closest() puisqu'il change à chaque élément. Sauf à ce que puisse intégrer un caractère joker dans closest.

  5. #5
    Expert confirmé
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 452
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 452
    Points : 4 601
    Points
    4 601
    Par défaut
    vu que tu as data-itmref="..." partour, pourquoi ne pas juste le recuperer sur l'element ?
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    document.getElementById('listresult').addEventListener('click', ({target}) => {
    console.log(target.dataset.itmref);
    });
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  6. #6
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2008
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2008
    Messages : 231
    Points : 82
    Points
    82
    Par défaut
    Parfois les choses les plus simples sont les meilleures

    Merci Doksuri.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/12/2019, 11h59
  2. Le clic sur une div ne fonctionne pas
    Par alaninho dans le forum jQuery
    Réponses: 3
    Dernier message: 30/06/2014, 10h57
  3. Clic() sur DIV superposés
    Par dacid dans le forum jQuery
    Réponses: 5
    Dernier message: 31/05/2011, 16h59
  4. Réponses: 4
    Dernier message: 05/06/2009, 13h48
  5. afficher le contenu d'un div au clic sur un bouton
    Par mussara dans le forum Balisage (X)HTML et validation W3C
    Réponses: 10
    Dernier message: 10/07/2006, 17h37

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