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 :

Changer une image suivant resultat requete !


Sujet :

JavaScript

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 102
    Points : 42
    Points
    42
    Par défaut Changer une image suivant resultat requete !
    Bonjour à tous,

    Je reviens avec un problème que je n'arrive pas résoudre.

    Je souhaite suivant le résultat d'une requête qui se met a jour toute les 0.5ssecondes , modifier l'image comme le texte.
    Le texte fonctionne , il se met à jour. Mais je souhaiterais associé l'image correspondante.

    E, gros quand le résultat de la requête est "allumée" j'affiche l'image "led_v_on.png" et quand le resultat est "éteinte" j'affiche led_v_off.png

    Bizarrement ca ne fonctionne pas. Une petite subtilité doit m’échapper.

    La fonction à examiner:
    Code : 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
    //-------------------------------------------------------------------------------
    			/*Met à jour l'état des LEDs  toutes les 0.5 secondes */		
    			function MAJLedV() {
     
    				const idTextLed1 = document.getElementById("id-etat-ledv"); // je défini l'endroit du texte que je dois remplacer par son ID
                   	                const requete_LEDV = new XMLHttpRequest();
    				requete_LEDV.open("GET", "/etatLED1.php", true);
    				requete_LEDV.send();
    				requete_LEDV.addEventListener("load", () => {
    					idTextLed1.textContent = requete_LEDV.responseText
    					if (requete_LEDV.responseText == "éteinte ")
    						{
    							viewImage('imageLedV',"<img src='images/led_v_off.png'>");
    						}
    					else if (requete_LEDV.responseText == "allumée ")
    						{
    							viewImage('imageLedV',"<img src='images/led_v_on.png'>");
    						}
    				});
    			}			
    			setInterval(MAJLedV, 500);  // je repete l'opération toute les 0.5 secondes

    Le code complet :
    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
    <!doctype html>
    <html lang="fr">
        <head>
            <meta charset="utf-8">
    		<link href="style.css" rel="stylesheet" media="screen" type="text/css"> 
    		<title>Commande LED</title>
        </head>
     
        <body>
     
    		<h1 id="titre" style='text-align:center;'>Serveur de Jérémy</h1>
     
    		<table align="center">
    			<tr height:100px>
    				<td>
    					<table align="center" style="border:2pt solid red; "  >
    						<tr>
    							<td width=220px style="text-align:left;padding-left:20px;border-bottom:none;height:50px;">La LED VERTE est <span id="id-etat-ledv">-</span></td>
    							<td style="text-align:left;" id="imageLedV"></td>
    						</tr>
     
    						<tr>
    							<td width=300px style="text-align:center;border-top:none;" colspan=2 >
    								<button class="bouton_on"  onclick="BoutonLED1on()">ON </button>
    								<button class="bouton_off" onclick="BoutonLED1off()">OFF</button>
    							</td>
    						</tr>	
    					</table>
    				</td>
    				<td width=50px;> </td>
    				<td>
    					<table align="center" style="border:2pt solid red;"  >
    						<tr>
    							<td width=220px style="text-align:left;;padding-left:20px;border-bottom:none;height:50px;">La LED BLEUE est <span id="id-etat-ledb">-</span></td>
    							<td style="text-align:left;" id="imageLedB"></td>
    						</tr>
     
    						<tr>
    							<td width=300px style="text-align:center;border-top:none;" colspan=2 >
    								<button class="bouton_on"  onclick="BoutonLED2on()">ON </button>
    								<button class="bouton_off" onclick="BoutonLED2off()">OFF</button>
    							</td>
    						</tr>
    					</table>
    				</td>
    			</tr>
    		</table>
     
     
     
    		<script type="text/javascript">
                    
                    function viewImage(id,etat) {
                    document.getElementById(id).innerHTML=etat;
                }
     
                            function BoutonLED1on() {
                    var xhttp = new XMLHttpRequest();
                    xhttp.open("GET", 'consignes.php?E_LED1=1', true);
                    xhttp.send();
                }
                            function BoutonLED1off() {
                    var xhttp = new XMLHttpRequest();
                    xhttp.open("GET", 'consignes.php?E_LED1=0', true);
                    xhttp.send();
                }
                            function BoutonLED2on() {
                    var xhttp = new XMLHttpRequest();
                    xhttp.open("GET", 'consignes.php?E_LED2=1', true);
                    xhttp.send();
                }
                            function BoutonLED2off() {
                    var xhttp = new XMLHttpRequest();
                    xhttp.open("GET", 'consignes.php?E_LED2=0', true);
                    xhttp.send();
                }                   
     
                            //-------------------------------------------------------------------------------
                            /*Met à jour l'état des LEDs  toutes les 0.5 secondes */              
                            function MAJLedV() {
                                    
                                    const idTextLed1 = document.getElementById("id-etat-ledv"); // je défini l'endroirt du texte que je dois remplacer par son ID
                    const requete_LEDV = new XMLHttpRequest();
                                    requete_LEDV.open("GET", "/etatLED1.php", true);
                                    requete_LEDV.send();
                                    requete_LEDV.addEventListener("load", () => {
                                            idTextLed1.textContent = requete_LEDV.responseText
                                            if (requete_LEDV.responseText == "éteinte ")
                                                    {
                                                            viewImage('imageLedV',"<img src='images/led_v_off.png'>");
                                                    }
                                            else if (requete_LEDV.responseText == "allumée ")
                                                    {
                                                            viewImage('imageLedV',"<img src='images/led_v_on.png'>");
                                                    }
                                    });
                            }                       
                            setInterval(MAJLedV, 500);  // je repete l'opération toute les 0.5 secondes
     
                            function MAJLedB() {
                                    
                                    const idTextLed2 = document.getElementById("id-etat-ledb"); // je défini l'endroirt du texte que je dois remplacer par son ID
                                    const requete_LEDB = new XMLHttpRequest();  // Je créer un objet de type requete
                                    requete_LEDB.open("GET", '/etatLED2.php', true);  // je constitue ma requete
                    requete_LEDB.send();  // j'envoie ma requete            
                                    requete_LEDB.addEventListener("load", () => {  // à la reception de la réponse du réponse, je remplace le texte
                                            idTextLed2.textContent = requete_LEDB.responseText // je remplace le texte par la réponse recue dans la requete
                                    });
                                    
                            }                                                               
                            setInterval(MAJLedB, 500);  // je repete l'opération toute les 0.5 secondes
                    
                    </script>
     
        </body>
    </html>

    Merci de m'avoir lu !

    @Mathieu: j'ai pas réussis a passé en timeout au lieu de setintervall !

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 885
    Points : 6 619
    Points
    6 619
    Par défaut
    Pour ce qui concerne ton problème d'images, je remarque que pour faire ce changement, tu changes carrément le contenu html d'un élément td avec le code html de l'image: ce n'est pas la bonne manière de procéder. La modification de la structure html n'est pas une opération anodine, et il y a beaucoup plus simple.
    La technique consiste à ce que les deux images soient présentes dans le code html dés le départ (donc écrites en dur l'une après l'autre dans ton td) mais en initialisant via css leur propriété display à none de manière à ce qu'elles n'apparaissent pas. Ensuite, via javascript, il suffit de basculer la propriété display de none à inline et vice et versa.

    Je ne suis pas sûr d'avoir tous les éléments pour pleinement comprendre toutes les contraintes imposées par ce que tu souhaites faire, néanmoins, je constate qu'il y a pas mal de code dupliqué, pas mal de styles inline (ce qui est mal car ça rend ton html lourd et peu lisible), ainsi que de vilains attributs onclick. J'écrirais le code de cette façon:
    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
    <!DOCTYPE html>
    <html lang="fr">
        <head>
            <meta charset="utf-8"/>
            <title>Commande LED</title>
            <link href="style.css" rel="stylesheet" type="text/css"/>
            <script type="text/javascript" src="script.js"></script>
        </head>
        <body>
            <h1 id="titre">Serveur de Jérémy</h1>
            <table id="LEDS">
                <tr>
                    <td>
                        <table id="E_LED1">
                            <tr>
                                <td>La LED VERTE est <span>-</span></td>
                                <td><img src="images/led_v_on.png"><img src="images/led_v_off.png"></td>
                            </tr>
                            <tr>
                                <td>
                                    <button class="button_on">ON</button>
                                    <button class="button_off">OFF</button>
                                </td>
                            </tr>
                        </table>
                    </td>
                    <td></td>
                    <td>
                        <table id="E_LED2">
                            <tr>
                                <td>La LED BLEUE est <span>-</span></td>
                                <td><img src="images/led_b_on.png"><img src="images/led_b_off.png"></td>
                            </tr>
                            <tr>
                                <td>
                                    <button class="bouton_on">ON</button>
                                    <button class="bouton_off">OFF</button>
                                </td>
                            </tr>
                        </table>
                    </td>
                </tr>
            </table>
        </body>
    </html>

    Tous les styles css que j'ai retirés trouveront une place de choix dans le fichier style.css.

    Le code de script.js:
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    document.addEventListener('DOMContentLoaded', function(e) {
        // gestion des boutons
        function LEDSwitch(e) {
            const xhr = new XMLHttpRequest(),
                  LEDName = e.target.parentNode.parentNode.id,
                  LEDState = e.target.className === 'button_on' ? '1' : '0';
     
            xhr.open('GET', `consignes.php?${LEDName}=${LEDState}`, true);
            xhr.send();
        }
     
        const LEDButtons = document.querySelectorAll('#LEDS table button');
        LEDButtons.forEach((button) => {
            button.addEventListener('click', LEDSwitch, false);
        });
     
        // mise à jour de l'état des LEDs
        function LEDsUpdate() {
            const xhr = new XMLHttpRequest();
     
            xhr.open('GET', 'LEDsState.php', true);
            xhr.responseType = 'json';
            xhr.send();
            xhr.onload = function() {
                if (xhr.status !== 200) {
                    console.log('erreur !');
                    return;
                }
     
                const LEDsState = JSON.parse(xhr.response);
     
                LEDsState.forEach((LED) => {
                    const LEDState = document.querySelector(`#${LED.id} tr td span`),
                          LEDImgs = document.querySelectorAll(`#${LED.id} tr td img`);
     
                    LEDState.textContent = LED.state === 'ON' ? 'allumée' : 'éteinte';
                    LEDImgs[0].style.display = LED.state === 'ON' ? 'inline' : 'none';
                    LEDImgs[1].style.display = LED.state === 'ON' ? 'none' : 'inline';
                });
            };
            setTimeout(LEDsUpdate, 500);
        }
     
        LEDsUpdate();
     
    }, false);

    Quant à LEDsState.php son rôle sera de renvoyer un tableau JSON avec l'état de toutes les LEDs, donc: [{"id":"E_LED1","state":"ON"},{"id":"E_LED2","state":"OFF"}] par exemple.

    Ce code est non-testé.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  3. #3
    Membre régulier Avatar de tag9724
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2021
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2021
    Messages : 64
    Points : 113
    Points
    113
    Par défaut
    Il y as plusieurs possibilités, la première est que la balise image est bien rajoutée mais n'affiche rien car le lien n'est pas bon.

    La seconde possibilité est que etatLED1.php ne renvoie pas exactement "éteinte " ou "allumée ", ici l'espace est important car "éteinte" est différent de "éteinte "

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        if (requete_LEDV.responseText == "éteinte ") {
          viewImage("imageLedV", "<img src='images/led_v_off.png'>")
        } else if (requete_LEDV.responseText == "allumée ") {
          viewImage("imageLedV", "<img src='images/led_v_on.png'>")
        }

    Si ta requête renvoie autre chose que littéralement "éteinte " ou "allumée " les deux conditions ne se remplirons jamais, il faudra soit retirer les espaces du texte renvoyé par la requête soit vérifier si ce texte contient le mot "éteinte" ou "allumée"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (requete_LEDV.responseText.trim() == "éteinte")
    Ou encore

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (requete_LEDV.responseText.includes("éteinte"))

    Attention aussi aux majuscules, par exemple "e" est différent de "E".


    Pour ce qui est d'utiliser un setTimeout a la place d'un setInterval il suffira juste de placer dans ton addEventListener une ligne supplémentaire setTimeout( MAJLedV, 500 ) et remplacer la ligne setInterval(MAJLedV, 500) par MAJLedV(), comme ceci donc :

    Code : 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
    function MAJLedV() {
      const idTextLed1 = document.getElementById("id-etat-ledv") // je défini l'endroirt du texte que je dois remplacer par son ID
      const requete_LEDV = new XMLHttpRequest()
      requete_LEDV.open("GET", "/etatLED1", true)
      requete_LEDV.send()
      requete_LEDV.addEventListener("load", () => {
        idTextLed1.textContent = requete_LEDV.responseText
     
        if (requete_LEDV.responseText.includes("éteinte")) {
          viewImage("imageLedV", "<img src='images/led_v_off.png'>")
        } else if (requete_LEDV.responseText.includes("allumée")) {
          viewImage("imageLedV", "<img src='images/led_v_on.png'>")
        }
     
        // Après chaque réception d'une requête on relance l'opération dans 500ms
        setTimeout( MAJLedV, 500 )
      })
    }
     
    // Le setInterval a été remplacé par un appel direct
    MAJLedV()

  4. #4
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 102
    Points : 42
    Points
    42
    Par défaut
    Bonjour à tous,

    Merci pour vos réponses !

    @CosmoKnacki :
    Je suis un peu gêné ( encore une fois) car tu as fait un joli code pour moi. Cependant tu fais rentrer trop de nouvelle chose et tu changes la structure. Je ne comprends pas ce que tu as écris. J'aime apprendre en avançant petit à petit. En corrigeant mes erreurs au fur et à mesure. recopier un code tout fait n'est pas très instructif.
    Mais encore un grand merci pour le travail, car mine de rien tu m'as fait chercher des notions et de plus tu apportes une partie de la solution !

    Pour le css, effectivement c'est pas très beau j'ai donc créer quelques class pour m'entrainer. Ça à l'air de fonctionner. Mais au final , il n'y a pas grand chose dans ces class les mettre directement en ligne me parle un peu plus. bien que pour le lecteur qui lit mon code je comprenne qua ca alourdisse.

    J'ai donc utilisé ton idée avec le display "none" et "inline".

    @tag9724 :

    Il y as plusieurs possibilités, la première est que la balise image est bien rajoutée mais n'affiche rien car le lien n'est pas bon.
    J'avais penser à cette idée et j'ai donc vérifié en affichant les images sans conditions "if" , ça fonctionne nickel. les liens sont bons !

    La seconde possibilité est que etatLED1.php ne renvoie pas exactement "éteinte " ou "allumée ", ici l'espace est important car "éteinte" est différent de "éteinte "
    J'y ai pensé aussi. surtout les accent et les retours à la ligne. Quand je fais F12 et que je regarde le résultat de la requête, je lis "éteinte " et "allumée " du coupe j'ai tout essayé avant de poster.
    J'ai enlevé tout les accents tout les retours à la ligne, bref, enlever les guillemets pour mettre des apostrophes . Rien n'i a fait !
    LE seul truc que j'ai oublie de faire c'est d'enlever les retours à la ligne jusqu’à le code php. peut etre que c'était cela le probléme:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    // allumée 
    <?php
        include("fonction.php");
     
        if($_GET['E_LED1'] == '1')
        {				
            ecrireDansFichier('etatLED1.php',"allumée",0);
            ecrireDansFichier('consignes.php',"C_LED1=ON \n",0);
         }
        elseif ($_GET['E_LED1']  =='0') {
            ecrireDansFichier('etatLED1.php',"éteinte",0);
            ecrireDansFichier('consignes.php',"C_LED1=OFF\n",0);
        }  
    ?>


    Donc du coup j’ai trouvé ton idée de seulement regardé si le texte est inclut dans la réponse, et ça fonctionne nickel !


    Pour le setTimeout( MAJLedV, 500 ) je pense que mon erreur venait du fait qu'il faille rajouter âpres la fucntion : MAJLedV()

    C'est quand même tordu comme fonctionnement ! tu déclares ta function time out, avec la fonction à répéter et le temps en deux répétition et ensuite tu dois appeler cette fonction ????? avouez que ce n'est pas très intuitif, non ?

    Bref en tout cas, ça fonctionne impeccable !

    Je vous joint le code intégral modifié qui fonctionne. Si vous avez des remarques sur la construction je suis preneur.
    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="fr">
        <head>
            <meta charset="utf-8">
    		<link href="style.css" rel="stylesheet" media="screen" type="text/css"> 
    		<title>Commande LED</title>
        </head>
     
        <body>
     
    		<h1 id="titre" style='text-align:center;'>Serveur de Jérémy</h1>
     
    		<table align="center">
    			<tr height:100px>
    				<td>
    					<table class="ta_BP">
    						<tr>
    							<td class="td_txt" >La LED VERTE est <span id="id-etat-ledv">---</span></td>
    							<td style="text-align:left;" ><img id="imageLedVon" src="images/led_v_on.png"><img id="imageLedVoff" src="images/led_v_off.png"></td>
    						</tr>
     
    						<tr>
    							<td width=300px style="text-align:center;" colspan=2 >
    								<button class="bouton_on"  onclick="BoutonLED1on()">ON </button>
    								<button class="bouton_off" onclick="BoutonLED1off()">OFF</button>
    							</td>
    						</tr>	
    					</table>
    				</td>
    				<td width=50px;> </td>
    				<td>
    					<table align="center" style="border:2pt solid red;"  >
    						<tr>
    							<td class="td_txt">La LED BLEUE est <span id="id-etat-ledb">-</span></td>
    							<td style="text-align:left;" ><img id="imageLedBon"src="images/led_v_on.png"><img id="imageLedBoff" src="images/led_v_off.png"></td>
    						</tr>
     
    						<tr>
    							<td class="td_BP" colspan=2>
    								<button class="bouton_on"  onclick="BoutonLED2on()">ON </button>
    								<button class="bouton_off" onclick="BoutonLED2off()">OFF</button>
    							</td>
    						</tr>
    					</table>
    				</td>
    			</tr>
    		</table>
     
     
     
    		<script type="text/javascript">
                    
                            function viewImage(id,etat) {
                    document.getElementById(id).innerHTML=etat;
                }
     
                            function BoutonLED1on() {
                    var xhttp = new XMLHttpRequest();
                    xhttp.open("GET", 'consignes.php?E_LED1=1', true);
                    xhttp.send();
                }
                            function BoutonLED1off() {
                    var xhttp = new XMLHttpRequest();
                    xhttp.open("GET", 'consignes.php?E_LED1=0', true);
                    xhttp.send();
                }
                            function BoutonLED2on() {
                    var xhttp = new XMLHttpRequest();
                    xhttp.open("GET", 'consignes.php?E_LED2=1', true);
                    xhttp.send();
                } 
                            function BoutonLED2off() {
                    var xhttp = new XMLHttpRequest();
                    xhttp.open("GET", 'consignes.php?E_LED2=0', true);
                    xhttp.send();
                }                   
     
                            //-------------------------------------------------------------------------------
                            /*Met à jour l'état des LEDs  toutes les 0.5 secondes */              
                            function MAJLedV() {
                                    
                                    const idTextLed1 = document.getElementById("id-etat-ledv"); // je défini l'endroirt du texte que je dois remplacer par son ID
                    const requete_LEDV = new XMLHttpRequest();
                                    requete_LEDV.open("GET", "/etatLED1.php", true);
                                    requete_LEDV.send();
                                    requete_LEDV.addEventListener("load", () => {
                                            idTextLed1.textContent = requete_LEDV.responseText ;
                                            
                                            if (requete_LEDV.responseText.includes("éteinte")) {
                                            imageLedVon.style.display ='none';
                                                    imageLedVoff.style.display ='inline';
                                            } else if (requete_LEDV.responseText.includes("allumée")) {
                                                    imageLedVon.style.display ='inline';
                                                    imageLedVoff.style.display ='none';
                                            }
                                        setTimeout( MAJLedV, 500 )  
                                    })                                                                      
                            }                       
                            MAJLedV()  // je repete l'opération toute les 0.5 secondes
     
                            function MAJLedB() {
                                    
                                    const idTextLed2 = document.getElementById("id-etat-ledb"); // je défini l'endroirt du texte que je dois remplacer par son ID
                                    const requete_LEDB = new XMLHttpRequest();  // Je créer un objet de type requete
                                    requete_LEDB.open("GET", '/etatLED2.php', true);  // je constitue ma requete
                    requete_LEDB.send();  // j'envoie ma requete            
                                    requete_LEDB.addEventListener("load", () => {  // à la reception de la réponse du réponse, je remplace le texte
                                            idTextLed2.textContent = requete_LEDB.responseText // je remplace le texte par la réponse recue dans la requete
                                            
                                            if (requete_LEDB.responseText.includes("éteinte")) {
                                            imageLedBon.style.display ='none';
                                                    imageLedBoff.style.display ='inline';
                                            } else if (requete_LEDB.responseText.includes("allumée")) {
                                                    imageLedBon.style.display ='inline';
                                                    imageLedBoff.style.display ='none';
                                            }
                                            setTimeout( MAJLedB, 500 )
                                    });
                                    
                            }                                                               
                            MAJLedB()  // je repete l'opération toute les 0.5 secondes
                    
                    </script>
     
        </body>
    </html>

    Un grand MERCI !

  5. #5
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 056
    Points : 44 578
    Points
    44 578
    Par défaut
    Bonjour,
    Citation Envoyé par dje8269
    Cependant tu fais rentrer trop de nouvelle chose et tu changes la structure.
    je trouve dommage que tu ne cherches pas au contraire à comprendre les mécanismes simples que l'on te propose, tu vas à terme vers du « code spagetti », car plus tu vas avancer et plus cela deviendra difficilement maintenable

    CosmoKnacki a signalé au moins trois points importants qu'il faut que tu prennes rapidement en compte, dans l'ordre d'apparition à l'écran :
    • tu changes carrément le contenu html d'un élément td avec le code html de l'image: ce n'est pas la bonne manière de procéder.
    • je constate qu'il y a pas mal de code dupliqué, pas mal de styles inline
    • Quant à LEDsState.php son rôle sera de renvoyer un tableau JSON avec l'état de toutes les LEDs, donc: [{"id":"E_LED1","state":"ON"},{"id":"E_LED2","state":"OFF"}] par exemple.

  6. #6
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 102
    Points : 42
    Points
    42
    Par défaut
    Bonjour ,

    @NoSmoking : je cherche à comprendre au contraire. Mais CosmoKnacki, fais rentrer de nombreuses fonctionnalités dans le code.
    Rien que la gestion des boutons je ne comprends pas l’écriture. JE comprends ce que ca fait dans les grandes lignes, mais je comprends pas comment c'est construit. Je n'ai que deux semaines de hmtl, JS .

    Comprendre ce qui ce passe est une chose, le reproduire et le maintenir ou le pouvoir le modifier en est une autre.

    En tout cas j'essaye de faire au mieux avec vos conseils.

  7. #7
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 885
    Points : 6 619
    Points
    6 619
    Par défaut
    @NoSmoking: merci pour ton soutien.

    @dje8269: Comme je l'ai précisé dans mon précédent message, c'est un code non-testé (je viens d'ailleurs de corriger une erreur) dont le but est plus de te montrer comment factoriser, pour ne pas avoir à recopier encore et encore le même code pour chaque nouvelle LED.
    D'après moi ce qui te désoriente le plus doit être les gestionnaires d'événements avec lesquels tu ne dois pas être très familier. Sans t'embrouiller avec les histoires de propagation d'événement pour le moment (mais un jour, il faudra s'y plonger), leur principe est simple: plutôt que de coller directement un attribut onclick ou onmachinchose à un élément dans le code html comme tu l'as fait au départ, on ajoute en javascript un écouteur d'événement (event listener) sur l'élément en question pour un événement précis. On précise aussi la fonction à déclencher (ici LEDSwitch) lorsque l'événement se produit: button.addEventListener('click', LEDSwitch, false);.

    La fonction à déclencher prend pour premier paramètre un objet Event (c'est l'événement en question), et parmi les propriétés de cette objet Event, il y a la propriété target qui renvoie l'élément sur lequel l'événement est survenu. En partant de cet élément et en remontant l'arbre DOM grâce à parentNode, j'atteins l'élément table(*) dont l'id est précisément le nom du champ à passer en paramètre GET au script PHP.
    Comme ce nom de champ est déduit en partant de l'élément cliqué, cette fonction peut être utilisée pour n'importe lequel des boutons.
    De la même manière, on déduit la valeur à envoyer de la classe de l'élément cliqué (on envoie '1' lorsque c'est button_on et '0' dans le cas contraire).

    (*) Il est possible qu'il faille un parentNode supplémentaire car en l'absence d'élément tbody dans l'élément table celui-ci est créer automatiquement dans l'arbre DOM, à vérifier.

    Encore à propos des gestionnaires d'événements, tu remarqueras que tout le code javascript est encapsulé dans une fonction qui est déclenchée lorsque l'intégralité du code html a été chargé dans le navigateur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    document.addEventListener('DOMContentLoaded', function() {
       //...
    });
    Sans cette précaution, le risque serait de faire référence dans le code javascript à des éléments qui n'existent pas encore!




    Pour en revenir au CSS, tu t'inquiètes de devoir créer des classes CSS quasiment vides (ce qui n'est pas grave en soi), mais tu n'es pas obligé de toujours passer par des ids ou des classes pour appliquer des styles sur des éléments, CSS dispose de toute une ribambelle de sélecteurs qui te permettent d'atteindre des éléments relativement à d'autres et, cerise sur le gâteau, il se trouve que ces sélecteurs CSS sont précisément ceux utilisés dans les méthodes querySelector et querySelectorAll.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  8. #8
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 885
    Points : 6 619
    Points
    6 619
    Par défaut
    Aussi, puisque tu es béotien de deux semaines en html/javascript (mais malgré ça, il semble que tu ais de la ressource), tes meilleurs alliés sont:
    • les outils de développement du navigateur (touche F12)
    • console.log(nomdevariable) pour afficher le contenu d'une variable dans la console du navigateur.
    • le site mdn (Mozilla Developper Network): une recherche "mdn CeQueJeVeuxSavoirSurJavascript" te sera d'un grand secours avec la réponse à ta question dans les 5 premiers résultats.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

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

Discussions similaires

  1. [VBA-E] inserer une image suivant état donné
    Par totoza dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 31/05/2006, 14h02
  2. Changer une image onmouseover
    Par Linaa dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 06/03/2006, 13h46
  3. Changer une image
    Par franck.automaticien dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 21/02/2006, 09h41
  4. changer une image
    Par lemmings dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/09/2005, 15h43
  5. [JLabel] changer une image
    Par dadg dans le forum Composants
    Réponses: 5
    Dernier message: 28/09/2004, 10h28

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