Bonjour,
Je suis débutant en javascript.
J’essaie de crée une infobull ou un popup sur un évènement click à partir d'élément généré, et je me confronte à des difficultés que je n'arrive pas à solutionner. Pouvez vous m'aider ?

Voici le code que j'utilise pour essai:
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
 
<!DOCTYPE html>
<html lang="">
  <head>
    <meta charset="utf-8">
    <title></title>
     <style>
.Visu_message {
        border :  2px solid black;
        background: white;
        color: black;
}
.Visu_bull {
  display: none;
        z-index: 10;
 
  position: fixed;
   top: 50%;
    left: 50%;
    transform: translate(-50%,-50%);
  background-color:Lemonchiffon;
  color:blue;
  border-radius:1px;
   transition: .5s all;
    transition-delay: 5s;
}
 
.Visu_bull_display{
    display: block;
    transition-delay:1s;
}
 
 
 
    </style>
  </head>
  <body>
    <header></header>
    <main>
<div id="service">
 
 
</div>
<div id="mess_html" class="Visu_message">message html</div>
<div id="info_html" class="Visu_bull">infobull html</div>
 
 
<div id="mess"></div>
<div id="mess2"></div>
 
    </main>
    <footer></footer>
  </body>
  <script type="text/javascript" >
  let conteneur=document.getElementById('service');
  const expr1='message principal n°1';
  const bull1='message infobulle n°1';
  const expr2='message principal n°2';
  const bull2='message infobulle n°2';
        var dinfobull = {1:[false,null,null],2:[false,null,null]};// suivi des infobull créé clée = id infobull valeur = [display,cont_principal,cont_infobulle]
 
        let     Console_html=`<div id="VisuErr_textL_id_1" class="Visu_message">${expr1}
                                <div id="VisuErr_bull_id_1" class="Visu_bull">${bull1}</div>
                        </div>
                        <div id="VisuErr_textL_id_2" class="Visu_message">${expr2}
                                <div id="VisuErr_bull_id_2" class="Visu_bull">${bull2}</div>
                        </div>`;
conteneur.innerHTML = Console_html;
 
function click_infobull(id){
//Fonction pour affiché des infobulles sur des elements générés
                if (dinfobull[id][0] == false){
                                dinfobull[id][0] = true;
                                dinfobull[id][2].classList.add(`Visu_bull_display`);
                }
                else {
                                dinfobull[id][0] = false;
                                dinfobull[id][2].classList.removeClass(`Visu_bull_display`);
 
                }
        }
 
 
let cont_mess=document.getElementById("mess");
let cont_mess2=document.getElementById("mess2");
//Test sur html
var affiche = false;
var cont_html=document.getElementById("mess_html");
cont_html.onclick = function() { click_hml(); };
function click_hml(){
//Fonction pour affiché des infobulles sur du html
                let cont_infohtml=document.getElementById("info_html");
                if (affiche == false){
                                affiche = true;
                        cont_mess.innerHTML=affiche;
                                cont_infohtml.classList.add(`Visu_bull_display`);
                }
                else {
                                affiche = false;
                        cont_mess.innerHTML=affiche;
                                cont_infohtml.classList.remove(`Visu_bull_display`);
 
                }
        }
 
//Test sur généré
                let mess=Object.keys(dinfobull);
                let mess2 = `x: `;
                if (document.readyState == "interactive"){
                        mess2 = 'pret:'+mess2 ;//+ '->';
                        cont_mess2.innerHTML=mess2;
/*                      for (let x in dinfobull){
                                mess2 = x ;//+ '->';
                                        dinfobull[x][1]=document.getElementById("VisuErr_textL_id_"+x);
                                        dinfobull[x][2]=document.getElementById("Visu_bull_id_"+x);
                                dinfobull[x][1].onclick = function() { click_infobull(x); };
                                dinfobull[x][2].onclick = function() { click_infobull(x); };
        //                      mess2 += "VisuErr_textL_id_"+x+'->'+dinfobull[x];
 
                        }
*/              }
                cont_mess.innerHTML=mess+JSON.stringify(dinfobull);
/*
*/
</script>
</html>

Le but de mes essais est de parvenir a créé un popup permettant différent information en fonction de l'élément ayant provoqué l'ouverture.
Dans mon code la partie problématique est :Test sur généré. J'aimerai réussir a affiché message infobulle n°1 et n°2.

Je ne comprend pas pourquoi mess2 = 'pret:'+mess2 ; ne s'affiche pas.
J'ai posé la ligne : document.readyState == "interactive" car je suppose que les lignes dinfobull[x][1]=document.getElementById("VisuErr_textL_id_"+x); retourne getElementById = null parceque ces element on été généré.

Pouvez vous me guidé vers les bonne pratique et m'aidez a comprendre ce que je fais mal?