Création dynamique d'eventListeners

Résolu
filtep -  
 filtep -
Bonjour,

je cherche à créer dynamiquement des eventListeners sur les éléments du DOM (ici des boutons) eux même créés dynamiquement.

<!DOCTYPE html>

<html>

    <head>                
    </head>
    
    <body onload="charge()";>    
    </body>
    
    <script type="text/javascript">
    
        function charge(){
        
            for(x=0; x<5; x++){
              var nouv_text="<button id='btn_" + x + "'>Bouton " + x + "</button><br>";
             document.body.innerHTML=document.body.innerHTML + nouv_text
             document.getElementById('btn_'+x).addEventListener('click', function(){alert(this.id);});
            }
        }
    
    </script>
    
</html>


Seul le dernier bouton 'garde' l'eventListener et je ne comprends pas pourquoi ? Certainement une histoire de variables mais... un peu d'aide ma serait grandement utile.

Merci d'avance

Philippe

3 réponses

  1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    Bonjour,

    Le problème c'est que tu réécris le contenu ( les boutons ) à chaque itération.
    Sauf que l'addevent n'existe plus au moment ou tu recréés les boutons.

    Pour le faire proprement, voici :

    function charge(){
    
      for(x=0; x<5; x++){
        var btn = document.createElement("BUTTON");
        btn.id = 'btn_'+x;
        btn.innerHTML =  'btn_'+x;
        document.body.appendChild(btn);
    
        btn.addEventListener('click', function(){alert(this.id);});
        
        var br = document.createElement("BR");
        document.body.appendChild(br);
        
        
      }
    }
    

    0
  2. filtep
     
    Merci beaucoup Jordane45,

    ta solution fonctionne parfaitement mais je ne comprends pas ce qui ne va pas dans mon code initial. C'est le:
    " document.body.innerHTML=document.body.innerHTML + nouv_text "
    qui pose problème parce que ça recrée tous les boutons sans leur evenListener, c'est çà ?
    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      C'est ça
      0
  3. filtep
     
    Merci beaucoup,
    ça faisait 24 h que je ne m'en sortait pas !

    Bonne fin de journée
    Philippe
    0