Cacher un element en fonction d'un radiobutton

Cacher un element en fonction d'un radiobutton - HTML/CSS - Programmation

Marsh Posté le 29-05-2024 à 22:09:39    

Bonjour,
 
j'espère poster dans la bonne catégorie.
 
Je suis entrain de faire une page HTML qui contient 2 radiobutton.
Je voudrais cacher un input et afficher l'autre si le radiobutton1 est cliqué et inversement.
 
Quelqu'un peut-il me dire comment faire ?
 
Merci.
 

Code :
  1. <div class="row"> 
  2.                         <p>La récupération de la consommation de la maison se fait via : </p>
  3.                         <div class="form-check">
  4.                             <input class="form-check-input" type="radio" name="flexRadioPowerMaison" id="flexRadioHA1">
  5.                             <label class="form-check-label" for="flexRadioHA1">
  6.                               Home Assistant
  7.                             </label>
  8.                           </div>
  9.                           <div class="form-check">
  10.                             <input class="form-check-input" type="radio" name="flexRadioPowerMaison" id="flexRadioShelly1" checked>
  11.                             <label class="form-check-label" for="flexRadioShelly1">
  12.                               Shelly
  13.                             </label>
  14.                           </div>
  15. <div class="col-md-12 col-lg-6">
  16.                      
  17.                         <div class="input-group my-3" id="IPShelly1">
  18.                           <span class="input-group-text col-8" >IP du Shelly 1 (conso maison)</span>
  19.                           <input required pattern="^((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])$" type="text" class="form-control mr-3 col-4" id="IPShelly1" placeholder="192.168.1.XXX" aria-describedby="IPShelly1">
  20.                         </div>
  21.                                            
  22.                       <div class="input-group my-3" id="IPHA" >
  23.                         <span class="input-group-text col-8" >IP de Home Assistant</span>
  24.                         <input required pattern="^((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])$" type="text" class="form-control mr-3 col-4" id="IPHA" placeholder="192.168.1.XXX" aria-describedby="IPHA">
  25.                       </div>
  26.                      </div>


---------------
Matheux Fou - https://afficheur-tempo.fr - TEMPO BOX pour abonnés TEMPO EDF
Reply

Marsh Posté le 29-05-2024 à 22:09:39   

Reply

Marsh Posté le 29-05-2024 à 23:32:34    

Tu as des solutions pure css mais il faut que le bloc a caché / découvrir soit placé au niveau html juste après l'input checkbox, comme ici par exemple :

Code :
  1. <style>
  2. input[type=checkbox]{
  3.     display: none;
  4. }
  5. input[type=checkbox]:checked ~ .remove-check{
  6.     display: none;
  7. }
  8. input[type=checkbox]:checked ~ #email{
  9.     display: block;
  10. }
  11. #email{
  12.     display: none;
  13. }
  14. </style>
  15. <label for="reveal-email" class="btn" style="width: 300px"> Sign Up</label>
  16. <input type="checkbox" id="reveal-email" role="button">
  17. <div id="email">
  18.     <form id="email-form" class="nice" action="" method="post">
  19.         <input class="input-text required email" type="text" name="EMAIL" id="id_email" placeholder="Email" />
  20.         <input type="hidden" name="name" id="id_name_email">
  21.         <a class="btn" >Apply</a>
  22.     </form>
  23. </div>


Source  : https://jsfiddle.net/nzcage/nvrgbj5q/
 
Sinon en JS avec ou sans Framework avec un listener sur l'input checkbox et des modification de display sur l'id ciblé comme ici :

Code :
  1. <script>
  2.     function showMe (box) {
  3.         var chboxs = document.getElementsByName("c1" );
  4.         var vis = "none";
  5.         for(var i=0;i<chboxs.length;i++) {
  6.             if(chboxs[i].checked){
  7.              vis = "block";
  8.                 break;
  9.             }
  10.         }
  11.         document.getElementById(box).style.display = vis;
  12.     }
  13. </script>
  14. <div id="div1" style="display:none">
  15. <table border=1 id="t1">
  16. <tr>
  17. <td>i am here!</td>
  18. </tr>
  19. </table>
  20. </div>
  21. <form>
  22. <input type="checkbox" name="c1" onclick="showMe('div1')">Show Hide Checkbox
  23. </form>


Source  : https://jsfiddle.net/mithunsatheesh/wwcRr/


---------------
D3
Reply

Marsh Posté le 30-05-2024 à 15:07:49    

EDIT : mon premier message n'a pas été validé.
merci pour ton aide le code fonctionne bien.
 
En revanche, après essai j'ai un truc que je ne comprends pas.
 
Lorsque je lance le fichier les 2 input sont bien côte à côte
 
https://ibb.co/9cbPLkS
 
Je clique sur Home assistant : j'ai bien les 3 input qui apparaissent
 
https://ibb.co/9h9Rtkr
 
Si j'appuie de nouveau sur Shelly : les 2 input ne sont plus côte à côte !!!
 
https://ibb.co/zrnCSDr
 
Voici mon code source
 

Code :
  1. <body id="page-top">
  2. <!-- Page Wrapper -->
  3. <div id="wrapper">
  4.  
  5.     <!-- Sidebar -->
  6.   <ul class="navbar-nav bg-gradient-success sidebar sidebar-dark accordion" id="accordionSidebar">
  7.     <!-- Sidebar - Brand -->
  8.     <a class="sidebar-brand d-flex align-items-center justify-content-center" href="/">
  9.       <div class="sidebar-brand-icon">
  10.         <i class="bi bi-sun"></i>
  11.       </div>
  12.       <div class="sidebar-brand-text mx-3">Routeur Solaire</div>
  13.     </a>
  14.     <!-- Divider -->
  15.     <hr class="sidebar-divider my-0">
  16.       <!-- Nav Item - Dashboard -->
  17.       <li class="nav-item active">
  18.           <a class="nav-link" href="/">
  19.               <h6 class="font-weight-bold"><i class="fas fa-fw fa-tachometer-alt"></i> Tableau de bord</h6>
  20.           </a>
  21.       </li>
  22.    </ul>
  23. <div id="content-wrapper" class="d-flex flex-column">
  24. <!-- Begin Page Content -->
  25.   <div class="container-fluid">
  26.   <!-- Page Heading -->
  27.     <div class="d-sm-flex align-items-center justify-content-between mb-4">
  28.       <h1 class="h3 mb-0 text-gray-800">Configuration du Système</h1>
  29.     </div> 
  30.              
  31.     <p class="mb-4">Page de configuration du Routeur Solaire; Pensez à sauvegarder votre configuration après l'avoir appliquée.</p>
  32.      
  33.     <div class="col-xl-12 col-xxl-12">
  34.     <!-- Entete Cadre CONFIGURATION -->
  35.       <div class="card position-relative">
  36.         <div class="card-header py-3">
  37.           <h6 class="m-0 font-weight-bold text-primary">Configuration</h6>
  38.             <span id="saveform"></span>
  39.         </div>
  40.         <div class="card-body  shadow">
  41.           <div class="col col-12">
  42.             <form class="user" id="formulaire" method="post" action=""  >
  43.               <div class="container text-start">
  44.                
  45.                 <div class="row"> 
  46.                   <p>La récupération de la consommation de la maison se fait via : </p>
  47.                 </div>
  48.                 <div class="row"> 
  49.                   <div class="form-check">
  50.                     <input class="form-check-input" type="radio" style="margin-right:10px;" name="flexRadioConsoMaison" id="flexRadioConsoMaisonHA" onclick="DisplayInputConsoMaison()">
  51.                     <label class="form-check-label" style="margin-right:10px;" for="flexRadioConsoMaisonHA">Home Assistant</label>
  52.                   </div>
  53.                   <div class="form-check">
  54.                     <input class="form-check-input" type="radio"  style="margin-right:10px;" name="flexRadioConsoMaison" id="flexRadioConsoMaisonShelly" onclick="DisplayInputConsoMaison()" checked >
  55.                     <label class="form-check-label" for="flexRadioConsoMaisonShelly" style="margin-right:10px;">Shelly</label>
  56.                   </div>
  57.                 </div>
  58.            <!--       ligne pour SHELLY   -->
  59.                 <div class="row"  id="SHELLY_Input" >
  60.                   <div class="col-md-12 col-lg-6">
  61.                     <div class="input-group my-3" >
  62.                       <span class="input-group-text col-8" >IP du Shelly 1 (conso maison)</span>
  63.                       <input pattern="^((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])$" type="text" class="form-control mr-3 col-4" id="IPShelly1" placeholder="192.168.1.XXX" aria-describedby="IPShelly1">
  64.                     </div>
  65.                   </div>
  66.                   <div class="col-md-12 col-lg-6">
  67.                     <div class="input-group my-3" id="IPShelly1">
  68.                       <span class="input-group-text col-8" >emeter</span>
  69.                        <input type="text" class="form-control mr-3 col-4" id="EmeterShelly1" placeholder="0" aria-describedby="IPShelly1">
  70.                     </div>
  71.                   </div>
  72.                 </div>
  73.              
  74.                 <!--       ligne pour HOME ASSISTANT   -->
  75.                
  76.                 <div class="row" id="HA_Input" style="display:none">
  77.                   <div class="col-md-6 col-sm-12">
  78.                     <div class="input-group my-3" id="IPHA" >
  79.                       <span class="input-group-text col-8" >IP de Home Assistant</span>
  80.                       <input pattern="^((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])$" type="text" class="form-control mr-3 col-4" id="IPHA" placeholder="192.168.1.XXX" aria-describedby="IPHA">
  81.                     </div>
  82.                   </div>
  83.                   <div class="col-md-6 col-sm-12">
  84.                     <div class="input-group my-3" id="HASensor" >
  85.                       <span class="input-group-text col-8" >Nom du sensor</span>
  86.                       <input type="text" class="form-control mr-3 col-4" id="HASensor" placeholder="" aria-describedby="HASensor">
  87.                     </div>
  88.                   </div>
  89.                   <div class="col-md-6 col-sm-12"> 
  90.                     <div class="input-group my-3" id="HABearer" >
  91.                       <span class="input-group-text col-8" >Bearer HA</span>
  92.                       <input type="text" class="form-control mr-3 col-4" id="HABearer" placeholder="" aria-describedby="HABearer">
  93.                     </div>
  94.                    </div>
  95.                 </div>
  96.                  <!--       ligne pour SHELLY 2   -->   
  97.                 <div class="row">
  98.                   <div class="col-md-12 col-lg-6">
  99.                     <div class="input-group my-3" id="IPShelly2">
  100.                       <span class="input-group-text col-8" >IP du Shelly 2 (conso CE)</span>
  101.                       <input pattern="^((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])$" type="text" class="form-control mr-3 col-4" id="IPShelly2" placeholder="192.168.1.XXX" aria-describedby="IPShelly2">
  102.                     </div>
  103.                   </div>
  104.                   <div class="col-md-12 col-lg-6">
  105.                     <div class="input-group my-3" id="IPShelly1">
  106.                       <span class="input-group-text col-8" >emeter</span>
  107.                       <input type="text" class="form-control mr-3 col-4" id="EmeterShelly2" placeholder="1" aria-describedby="IPShelly1">
  108.                     </div>
  109.                   </div>
  110.                 </div>
  111.                
  112.                
  113.                 <input type="submit" value=" Application des parametres" class="btn btn-success btn-user btn-block col-4 mx-auto shadow h-100">
  114.                
  115.               </div>
  116.          
  117.              
  118.             </form>
  119.           </div> <!-- col col-12-->
  120.         </div><!-- class="card-body" -->
  121.       </div><!-- card position-relative -->
  122.     </div> <!--class="col-xl-12 col-xxl-12" -->
  123.    
  124.     <div class="col-lg-4 my-2 mx-auto">
  125.       <div class="card border-left-success shadow h-100 py-2">
  126.         <div class="card-body">
  127.           <div class="row no-gutters align-items-center">
  128.             <div class="col mr-2">
  129.             <!--<div class="text-xs font-weight-bold text-primary text-uppercase mb-1">Sauvegarder</div>
  130.               -->
  131.               <div class="h5 mb-0 font-weight-bold text-gray-800"><span id="save"   ><a href="#">SAUVEGARDER</a></span><br><span id="savemsg"></span>
  132.               </div>
  133.             </div>
  134.             <div class="col-auto">
  135.               <i class="fas fa-download fa-2x text-gray-300"></i>
  136.             </div>
  137.           </div>
  138.         </div>
  139.       </div>
  140.     </div>
  141.   </div> <!--class="container-fluid" -->
  142. </div> <!--<div id="content"> -->   
  143. </div>
  144.        
  145.     <script type='text/javascript'>
  146.     function DisplayInputConsoMaison () {
  147.       var chboxs = document.getElementsByName("flexRadioConsoMaison" );
  148.         if ( chboxs[0].checked) {
  149.           document.getElementById('HA_Input').style.display = "block";
  150.           document.getElementById('SHELLY_Input').style.display = "none";
  151.           }
  152.         if ( chboxs[1].checked) {
  153.           document.getElementById('HA_Input').style.display = "none";
  154.           document.getElementById('SHELLY_Input').style.display = "block";
  155.           }
  156.    
  157.    
  158.    
  159.     }
  160.     </script>
  161.    
  162.    
  163.    </body>


Message édité par davidmarli le 30-05-2024 à 15:40:40

---------------
Matheux Fou - https://afficheur-tempo.fr - TEMPO BOX pour abonnés TEMPO EDF
Reply

Marsh Posté le 30-05-2024 à 16:04:38    

Le type d'un bloc div est par défaut block mais vu que tu utilises manifestement un framework qui te fait un colonage il se peut que ce soit flex ou inline-block.
 
Il se peut que son statut de block ou flex dépendent aussi de la résolution de ton dispositif de visualisation (un smartphone mettre surement tes colonnes les une au dessus des autres et donc tu seras probablement en display:block & width:100%).
 
Essaye d'inspecter ton élement à l'aide du clic droit de ton navigateur pour voir son style par défaut...
https://www.google.com/search?q=inspecter+l'element


---------------
D3
Reply

Marsh Posté le 30-05-2024 à 16:12:17    

bien vu avec "flex" ça marche !
 
Quand on n'y connait rien, on perd vite son temps pour pas grand chose.
 
Encore merci pour ton aide.


---------------
Matheux Fou - https://afficheur-tempo.fr - TEMPO BOX pour abonnés TEMPO EDF
Reply

Marsh Posté le 30-05-2024 à 16:56:37    

davidmarli a écrit :

bien vu avec "flex" ça marche !


Tu devrais stocker la valeur initial avant ton code de modification car il se peut que sa valeur dépendent de ta résolution d'affichage.
Un truc du genre :

Code :
  1. <script type='text/javascript'>
  2. var original_display = document.getElementById('HA_Input').style.display;
  3.     function DisplayInputConsoMaison () {
  4.       var chboxs = document.getElementsByName("flexRadioConsoMaison" );
  5.         if ( chboxs[0].checked) {
  6.           document.getElementById('HA_Input').style.display = original_display;
  7.           document.getElementById('SHELLY_Input').style.display = "none";
  8.           }
  9.         if ( chboxs[1].checked) {
  10.           document.getElementById('HA_Input').style.display = ;
  11.           document.getElementById('SHELLY_Input').style.display = original_display;
  12.           }
  13.     }
  14. </script>


Après y'aurait pas mal de chose à améliorer dans ton code mais du moment que ça fonctionne... [:nedurb]  

davidmarli a écrit :

Quand on n'y connait rien, on perd vite son temps pour pas grand chose.


C'est sur. :o  

davidmarli a écrit :

Encore merci pour ton aide.


De rien :hello:


Message édité par mechkurt le 30-05-2024 à 19:31:21

---------------
D3
Reply

Marsh Posté le 30-05-2024 à 19:13:44    

je me doute bien que des spécialistes du html/bootstrap/javascript doivent avoir des sueurs froides en voyant mon code...
Mais chacun son métier.
J'essaye de faire du mieux que je peux.
 
Bon maintenant il faut que je m'attèle à la récupération des données à afficher sur l'HTML en piochant dans mes fichiers de config avec les submit des forms ....


Message édité par davidmarli le 30-05-2024 à 19:15:00

---------------
Matheux Fou - https://afficheur-tempo.fr - TEMPO BOX pour abonnés TEMPO EDF
Reply

Marsh Posté le 30-05-2024 à 19:45:48    

Tient nous au jus, y'a ptet une API interrogeable, voir même des projets déjà développé...


---------------
D3
Reply

Marsh Posté le 30-05-2024 à 20:20:43    

pour ça, ça devrait aller, c'est pas la première fois que je programme ce genre de truc.
Mon programme renvoie une chaine de caractères avec les éléments dont j'ai besoin et je parse dans le doc HTML en attribuant les innerHTML  
 
Mais je n'hésiterai pas si j'ai besoin.
 


---------------
Matheux Fou - https://afficheur-tempo.fr - TEMPO BOX pour abonnés TEMPO EDF
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed