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 :

Event au click sur plusieurs éléments du DOM


Sujet :

JavaScript

  1. #1
    Membre du Club Avatar de Hadock
    Homme Profil pro
    Chef de projet
    Inscrit en
    Avril 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 52
    Points : 61
    Points
    61
    Par défaut Event au click sur plusieurs éléments du DOM
    Bonjour je bosse avec Bootstrap3 actuellement et je voulais crée un petit effet sur les collapse. En gros quand on clic il y a une flèche qui change de direction.

    Seulement ça fonctionne un peux aléatoirement j'ai donc du loupé un truc, si vous avez une idée merci d'avance!

    Et je voulais aussi savoir comment je peux récupérer le firstChild sans utiliser "firstchild" car je suis obligé de tout mettre sur une ligne dans mon code à cause des nœuds "#text" qui se crée sinon.

    Merci d'avance.

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    <div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
     
                <div class="panel panel-default">
                    <div class="panel-heading" role="tab" id="headingOne">
                        <h4 class="panel-title">
                            <a class="bt" role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseOne" aria-expanded="true" aria-controls="collapseOne"><i class="icon material-icons">expand_less</i><span class="textLink">Articles populaires</span></a>
                        </h4>
                    </div>
                    <div id="collapseOne" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="headingOne">
                        <div class="panel-body">
                            <ul>
                                <li><a href="page.html">Créer un compte</a></li>
                                <li><a href="#">Créer un mdp</a></li>
                                <li><a href="#">Valider votre compte</a></li>
                                <li><a href="#">Contrôler les informations que les utilisateurs voient à propos de vous dans les service Google</a></li>
                                <li>ect...</li>
                            </ul>
                        </div>
                    </div>
                </div>
     
                <div class="panel panel-default">
                    <div class="panel-heading" role="tab" id="headingTwo">
                        <h4 class="panel-title">
                            <a class="bt collapsed" role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo"><i class="icon material-icons">expand_more</i><span class="textLink">Articles populaires</span></a>
                        </h4>
                    </div>
                    <div id="collapseTwo" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingTwo">
                        <div class="panel-body">
                            Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.
                        </div>
                    </div>
                </div>
     
                <div class="panel panel-default">
                    <div class="panel-heading" role="tab" id="headingThree">
                        <h4 class="panel-title">
                            <a class="bt collapsed" role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseThree" aria-expanded="false" aria-controls="collapseThree"><i class="icon material-icons">expand_more</i><span class="textLink">Articles populaires</span></a>
                        </h4>
                    </div>
                    <div id="collapseThree" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingThree">
                        <div class="panel-body">
                            Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.
                        </div>
                    </div>
                </div>
     
            </div>

    Code javascript : 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
    //je récupére les élém utile
    var links = document.getElementsByClassName('bt'); //liens
     
    //je leur ajoute un event au click
    for (var i=0; i<links.length; i++) {
     
        links[i].addEventListener('click', function(e) {
            swip();
        })
     
    }
     
    function swip () {
     
        for (var i=0; i<links.length; i++) {
     
            //TODO trouver un autre moyen de chopper le first child
     
            if (links[i].classList.contains('collapsed')) { //si links à la class collapsed
                links[i].firstChild.innerText = 'expand_more'; //alors c'est fermé donc more
            } else {
                links[i].firstChild.innerText = 'expand_less'; //sinon c'est ouvert donc less
            }
        }
     
    }

    PS : je sait qu'il existe les event sur les collapse mais pour l'exercice je ne veux pas les utiliser.

  2. #2
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut


    Il faut utiliser querySelector() :

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    <!DOCTYPE html>
    <html lang="fr" dir="ltr">
    <head>
    	<!-- cache-control avec max-age=60 pour le développement uniquement -->
      <meta http-equiv="cache-control" content="public, max-age=60">
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
      <meta name="author" content="Daniel Hagnoul">
      <title>test</title>
      <style>
                    *,
                    *:after,
                    *:before {
                            box-sizing: border-box;
                    }
                    
                    /* code du test */
                    
                    
                    /* fin code du test */
                    
            </style>
    	<script>
                    'use strict';
                                                    
                    document.addEventListener( "DOMContentLoaded", ev => {
                            // le DOM est construit, la page web n'est pas visible
                            // code du test
                            
                            
                            // fin code du test
                    
                    }, false );
                    
                    window.addEventListener( "load", ev => {
                            // le DOM est construit et la page web est visible
                            // code du test
            
                            const
                                    links = Array.from( document.querySelectorAll( ".bt" ) );
                                    
                            for ( const link of links ){
                                    link.addEventListener( "click", ev => {
                                            swip( ev.currentTarget );
                                            
                                            /*
                                             * ev.target est l'élément span dans le tag A
                                             * ev.currentTarget est le tag A
                                             */ 
                                    })
                            }
                             
                            function swip ( link ){
                                    
                                    // debug, console.touche F12
                                    console.log( "collapsed = ", link.classList.contains( "collapsed" ) );
                                    console.log( "i = ", link.querySelector( "i" ) );
                                    
                                    if ( link.classList.contains( "collapsed" ) ){
                                             link.querySelector( "i" ).textContent = 'expand_more';
                                    } else {
                                             link.querySelector( "i" ).textContent = 'expand_less';
                                    }
                            }
                            
                            // fin code du test
                    
                    }, false );
      </script>
    </head>
    <body>
    	<main>
     
    		<div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
     
    			<div class="panel panel-default">
    					<div class="panel-heading" role="tab" id="headingOne">
    							<h4 class="panel-title">
    									<a class="bt" role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
    										<i class="icon material-icons">expand_less</i>
    										<span class="textLink">Articles populaires</span>
    									</a>
    							</h4>
    					</div>
    					<div id="collapseOne" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="headingOne">
    							<div class="panel-body">
    									<ul>
    											<li><a href="page.html">Créer un compte</a></li>
    											<li><a href="#">Créer un mdp</a></li>
    											<li><a href="#">Valider votre compte</a></li>
    											<li><a href="#">Contrôler les informations que les utilisateurs voient à propos de vous dans les service Google</a></li>
    											<li>ect...</li>
    									</ul>
    							</div>
    					</div>
    			</div>
     
    			<div class="panel panel-default">
    					<div class="panel-heading" role="tab" id="headingTwo">
    							<h4 class="panel-title">
    									<a class="bt collapsed" role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo">
    										<i class="icon material-icons">expand_more</i>
    										<span class="textLink">Articles populaires</span>
    									</a>
    							</h4>
    					</div>
    					<div id="collapseTwo" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingTwo">
    							<div class="panel-body">
    									Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid.
    									3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum
    									eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla
    									assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt
    									sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table,
    									raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.
    							</div>
    					</div>
    			</div>
     
    			<div class="panel panel-default">
    					<div class="panel-heading" role="tab" id="headingThree">
    							<h4 class="panel-title">
    									<a class="bt collapsed" role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseThree" aria-expanded="false" aria-controls="collapseThree">
    										<i class="icon material-icons">expand_more</i>
    										<span class="textLink">Articles populaires</span>
    									</a>
    							</h4>
    					</div>
    					<div id="collapseThree" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingThree">
    							<div class="panel-body">
    									Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid.
    									3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum
    									eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla
    									assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt
    									sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table,
    									raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.
    							</div>
    					</div>
    			</div>
     
    		</div>
     
    	</main>
    </body>
    </html>

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  3. #3
    Membre du Club Avatar de Hadock
    Homme Profil pro
    Chef de projet
    Inscrit en
    Avril 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 52
    Points : 61
    Points
    61
    Par défaut
    Bonjour, donc en gros je stocke mes élems dans un tableau grâce à queryselector puis je fais une boucle sur le tableau (un foreach ça irait aussi?) pour leur ajouter l'event click. Je vais me renseigner sur le target aussi. J'avais déjà vu mais là ça prend du sens alors faut que j’apprenne à m'en servir!
    Par contre je connais pas "ev=>" c'est quoi?

    Merci =)

  4. #4
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    J'utilise le JS de la norme ES2015 (déjà deux ans !), pour le convertir dans le JS antique voir le "Nota bene" en rouge dans ma signature.

    Impossible de vous l'apprendre en deux mots, voir : http://exploringjs.com/es6/index.html.

    const links = Array.from( document.querySelectorAll( ".bt" ) ); links est un véritable Array grâce à Array.from()

    Citation Envoyé par Hadock Voir le message
    Bonjour, donc en gros je stocke mes élems dans un tableau grâce à queryselector puis je fais une boucle sur le tableau (un foreach ça irait aussi?) [...]
    La boucle for of est plus rapide.

    Citation Envoyé par Hadock Voir le message
    [...] Par contre je connais pas "ev=>" c'est quoi?
    ev => { ... } est équivalent à function( ev ){ ... }

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  5. #5
    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 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    Une autre possibilité est de passer par un event du parent et recupérer le e.traget par propagation comme là https://www.developpez.net/forums/d1...sieurs-images/
    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 !

  6. #6
    Membre du Club Avatar de Hadock
    Homme Profil pro
    Chef de projet
    Inscrit en
    Avril 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 52
    Points : 61
    Points
    61
    Par défaut
    Merci beaucoup de vos infos, on m'a parlé des "trigger" aussi; du coup je vais regarder tout ça! je clos le sujet et encore une fois : merci

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

Discussions similaires

  1. Event/Listener sur un élément du DOM SVG d'une balise <object>
    Par Jarode01 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 14/07/2011, 13h52
  2. fonction .click sur nouvel élément
    Par tylerr dans le forum jQuery
    Réponses: 6
    Dernier message: 30/08/2010, 16h38
  3. [SVG] zoom sur plusieurs éléments
    Par baris69330 dans le forum XML/XSL et SOAP
    Réponses: 11
    Dernier message: 18/06/2010, 20h16
  4. [ZF 1.7] Validator sur plusieurs éléments
    Par CinePhil dans le forum Zend_Form
    Réponses: 4
    Dernier message: 30/03/2010, 10h07
  5. [Prototype] Placer un observateur sur plusieurs éléments
    Par Shirraz dans le forum Bibliothèques & Frameworks
    Réponses: 14
    Dernier message: 06/04/2009, 22h16

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