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 :

addEventListener dans une boucle


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2011
    Messages : 16
    Par défaut addEventListener dans une boucle
    bonjour,

    je tourne en rond sur le problème suivant et une aide me serait bien utile.
    Merci d'avance.

    Voici mon script:

    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
     <title>Document</title>
      <style type="text/css">
            
    .lettre {
                            display:none;
                    }
                    </style>
     </head>
     <body>
      <p class='chiffre'>1</p>
      <p class ='lettre'>un</p>
      <p class='chiffre'>2</p>
      <p class ='lettre'>deux</p>
     
     
    <script type="text/javascript">
     
    window.onload=function()
    {
            var chiffre=document.getElementsByClassName('chiffre');
            var lettre=document.getElementsByClassName('lettre');
     
            for(var i=0;i<chiffre.length;i++)
                            {chiffre[i].addEventListener('click',function(){lettre[i].style.display='block';});
                            }
    }
    </script>
     </body>

    Mon objectif est d’obtenir qu'au clic sur le chiffe affiché on obtienne l'affichage du nombre correspondant caché à l'ouverture.
    Malheureusement, ma boucle ne fonctionne pas. J'obtiens l'erreur 'Impossible d'obtenir la propriété 'style' d'une référence null ou non définie.'

    Merci de votre aide.
    Cordialement.

  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 : 74
    Localisation : Belgique

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

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


    getElementsByClassName : https://developer.mozilla.org/fr/doc...ntsByClassName
    querySelectorAll : https://developer.mozilla.org/fr/doc...erySelectorAll

    Ils renvoient une nodeList pas un véritable array, c'est pourquoi j'utilise Array.from() pour manipuler la nodeList comme un array.

    Array.from() : https://developer.mozilla.org/fr/doc...aux/Array/from

    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
    <!DOCTYPE html>
    <html lang="fr" dir="ltr">
    <head>
      <meta http-equiv="cache-control" content="public, max-age=60">
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <meta name="author" content="Daniel Hagnoul">
      <title>Test</title>
      <style>
        .lettre     {
          display: none;
        }    
      </style>
      <script>
        'use strict';
        
        document.addEventListener( 'DOMContentLoaded', ev => {
          
        }, false );
        
        window.addEventListener( 'load', ev => {
          
          const
            chiffres = document.querySelectorAll( ".chiffre" ),
            lettres = document.querySelectorAll( ".lettre" );
     
            for ( let [ i, chiffre ] of Array.from( chiffres ).entries() ){
              chiffre.addEventListener( "click", () => {
                lettres[ i ].style.display = "block";
              }, false );
            }
            
        }, false );
      </script>
    </head>
    <body>
      <main>
     
        <p class="chiffre">1</p>
        <p class="lettre">un</p>
        <p class="chiffre">2</p>
        <p class="lettre">deux</p>
     
      </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 averti
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2011
    Messages : 16
    Par défaut
    merci de votre réponse.

    Toutefois, je n'ai pas pu la tester. Il semble qu'il y ait une erreur de syntaxe à la ligne 17 que je ne sais pas corriger.
    En effet, vous utilisez une syntaxe qui ne m'est pas familière.

    Cordialement

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Citation Envoyé par Trocmuch Voir le message
    Toutefois, je n'ai pas pu la tester. Il semble qu'il y ait une erreur de syntaxe à la ligne 17 que je ne sais pas corriger.
    J'ai testé et chez moi cela fonctionne, tu peux aussi tester ici : http://jsbin.com/qurubecuka/edit?html,output

    Sinon ton code fonctionne aussi si (dans la boucle for) tu remplaces var i = 0; par let i=0;, j'ai fait le test ici : http://jsbin.com/bixuwapebu/edit?html,output

    J'ai deviné ça avec les réponses de DanielHagnoul mais je ne peux pas expliquer car je ne maitrise pas du tout...

  5. #5
    Membre averti
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2011
    Messages : 16
    Par défaut
    Merci à tous les deux.

    Je dois préciser que l'affichage 'erreur de syntaxe' était en fait le fait du seul internet explorer .
    Avec les autres navigateurs tout fonctionne correctement.

  6. #6
    Membre très actif
    Homme Profil pro
    bricoleur par les mots
    Inscrit en
    Avril 2015
    Messages
    744
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : bricoleur par les mots
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2015
    Messages : 744
    Par défaut
    jour

    quelle version

Discussions similaires

  1. [langage] incrementation de variable dans une boucle
    Par mimilou dans le forum Langage
    Réponses: 15
    Dernier message: 16/04/2004, 13h23
  2. Problème avec TNMSMTP dans une boucle.
    Par Orgied dans le forum Web & réseau
    Réponses: 3
    Dernier message: 07/04/2004, 10h19
  3. swf dans une boucle asp
    Par Chucky69 dans le forum Flash
    Réponses: 11
    Dernier message: 10/02/2004, 17h07
  4. [Vb.net] Indexé un objet crée dans une boucle
    Par picpic dans le forum Windows Forms
    Réponses: 10
    Dernier message: 17/12/2003, 14h37
  5. Pause dans une boucle
    Par HT dans le forum Langage
    Réponses: 4
    Dernier message: 03/06/2003, 08h52

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