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

  1. #1
    Membre à l'essai
    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
    Points : 14
    Points
    14
    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 : 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


    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 à l'essai
    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
    Points : 14
    Points
    14
    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 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    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 à l'essai
    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
    Points : 14
    Points
    14
    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 expérimenté
    Homme Profil pro
    chomeur
    Inscrit en
    Avril 2015
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : chomeur
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2015
    Messages : 710
    Points : 1 585
    Points
    1 585
    Par défaut
    jour

    quelle version
    Plus vite encore plus vite toujours plus vite.

  7. #7
    Membre à l'essai
    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
    Points : 14
    Points
    14
    Par défaut
    Curieusement, je ne sais pas !

    J'utilise un éditeur du nom de Editplus quelque peu confidentiel semble t'il.
    Cet éditeur possède un navigateur intégré basé sur IE, mais je ne sais pas lequel.

    Le problème que j'ai rencontré avec ce navigateur intégré ne se reproduit pas avec Edge.

    Je n'ai pas d'autre version d'IE installée.

  8. #8
    Membre expérimenté
    Homme Profil pro
    chomeur
    Inscrit en
    Avril 2015
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : chomeur
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2015
    Messages : 710
    Points : 1 585
    Points
    1 585
    Par défaut
    ca pourrait donc bien être la version utilisé il faudrait essayer avec ie 11 (sur windows 10 clic droit ouvrir avec)

    getElementsByClassName et addEventListener fonctionne a partir de ie 9 pareille pour querySelectorAll voir une version supérieur
    Plus vite encore plus vite toujours plus vite.

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