Cocher un radio bouton à partir d'un fonction JS

Default
,

Bonjour, je sais que ce sujet a déjà été mis plusieurs fois, cependant même en lisant les réponses et en les essayant je n'ai pas réussi à faire marcher ce que je voulais....

Alors voila, j'ai 3 radios boutons, l'un d'eux est déjà coché. Ce que je voudrai faire c'est: lorsque l'utilisateur coche un autre bouton que celui déjà coché, cela affiche une pop up (ça c'est bon) qui lui demande s'il veut vraiment changer. S'il clique sur oui cela change bien le radio bouton qui est coché (c'est bon aussi) mais s'il clique sur non, cocher le radio bouton qui était déjà coché (c'est ce que je n'arrive pas).

Voici mes radio bouton:

<input type="radio" name="categorie" value="PourInfo" id="PourInfo" class="pourInfo" onclick="pourInfo()" /> <label for="PourInfo">Pour information</label>


<input type="radio" name="categorie" value="Mineure" id="Mineure" class="mineure" onclick="mineure()" /> <label for="Mineure">Mineure</label>


<input type="radio" name="categorie" value="Majeure" id="Majeure" class="majeure" checked/> <label for="Majeure">Majeure</label><br /> <br/>

Voici les fonction pourInfo() et mineure() qui ouvre les pop up

const popUpMineure=document.getElementById('boxMineure');
const popUpPourInfo=document.getElementById('boxPourInfo');

 popUpMineure.style.display='none';
 popUpPourInfo.style.display='none';

  function pourInfo(){
        popUpPourInfo.style.display='block';
    }

    function mineure(){
        popUpMineure.style.display='block';
    }

Voici le HTML des div pou les pop up:

<div id="boxPourInfo">
    <div id="textPopUp">
        Voulez-vous vraiment change le type de non conformité de la fiche ?<br/>
    </div>
    <div id="boutonsPopUp">
        <button id="PopUpNon" type="button" onclick="laisserMajeure()" class="nePasChanger">Non</button>
        <button id="PopUpOui" type="button" onclick="fermerPopUp()" >Oui</button>
    </div>
</div>

<div id="boxMineure">
    <div id="textPopUp">
        Voulez-vous vraiment change le type de non conformité de la fiche ?<br/>
    </div>
    <div id="boutonsPopUp">
        <button id="PopUpNon" type="button" onclick="laisserMajeure();" class="nePasChanger">Non</button>
        <button id="PopUpOui" type="button" onclick="fermerPopUp()" >Oui</button>
    </div>
</div>

J'ai testé plusieurs choses pour le bouton non mais rien ne marche.... voici ce que j'ai testé:

$(document).ready(function(){
        $(".nePasChanger").click(function(){
            $("#Majeure").prop("checked", true);
        });
        popUpPourInfo.style.display='none';
        popUpMineure.style.display='none';
    });

ou encore

function laisserMajeure(){

     document.form['categorie'][3].checked=true;

       popUpPourInfo.style.display='none';
       popUpMineure.style.display='none';

   }

Mais aucun ne marche... Pouvez-vous m'aider ? Merci !

1 Réponse

Default
,

Bonour, J'espère avoir compris et résolu ton problème qui nécessite forcément de stocker la valeur de la case cochée...
PS : attention à ne jamais avoir deux IDs identiques dans une même page HTML (dans tes "box").
PS2 : tu as posé un pb, j'ai cherché à le résoudre, maintenant, en terme d'ergonomie et de bonne pratique, je trouve pas ça génial, mais bon, c'est toi qui vois...
PS3 : tes deux derniers essais sont faux en terme de syntaxe, normal que ça ne fonctionne pas

<!doctype html>
<html lang="fr">
<head>
  <meta charset="utf-8">
  <title>Titre de la page</title>

<style>
</style>

</HEAD>

<BODY>

    <div id="boxPourInfo">
        <div>
            Pour information : blala <br/>
        </div>
        <div id="boutonsPopUp_boxPourInfo">
            <button type="button" onclick="fermerPopUp();" class="nePasChanger">Non</button>
            <button type="button" onclick="ValiderChangement()" >Oui</button>
        </div>
    </div>

    <div id="boxMajeureMineure">
        <div>
            Voulez-vous vraiment changer le type de non conformité de la fiche ?<br/>
        </div>
        <div id="boutonsPopUp_boxMineure">
            <button type="button" onclick="fermerPopUp();" class="nePasChanger">Non</button>
            <button type="button" onclick="ValiderChangement()" >Oui</button>
        </div>
    </div>

    <form id="form">
        <input type="radio" name="categorie" id="PourInfo" value="PourInfo" class="pourInfo" onclick="openbox(this.value)" /> <label for="PourInfo">Pour information</label>
        <input type="radio" name="categorie" id="Mineure" value="Mineure" class="mineure" onclick="openbox(this.value)" /> <label for="Mineure">Mineure</label>
        <input type="radio" name="categorie" id="Majeure" value="Majeure" class="majeure" checked onclick="openbox(this.value)"/> <label for="Majeure">Majeure</label><br /> <br/>
    </form>



    <script>
const boxMajeureMineure=document.getElementById('boxMajeureMineure');
const boxPourInfo=document.getElementById('boxPourInfo');
boxMajeureMineure.style.display='none';
boxPourInfo.style.display='none';

let old_value=document.getElementById('form')['categorie'].value;//première valeur "Majeure"
let new_value=old_value;

  function openbox(v){
        boxMajeureMineure.style.display='none'; 
        boxPourInfo.style.display='none';
        new_value=v;
        if (old_value===new_value){return;}//Ne réaffiche pas les box/popups si on a déjà cliqué

        document.getElementById(old_value).checked=true;

        switch (new_value) {
            case "PourInfo": 
                boxPourInfo.style.display='block';
                break;
            case "Mineure":
                boxMajeureMineure.style.display='block';
                break;
            case "Majeure": 
                boxMajeureMineure.style.display='block';
                break;
        }      
    }

    function fermerPopUp(){
        boxPourInfo.style.display='none';
        boxMajeureMineure.style.display='none'; 
    }

    function ValiderChangement(){
        boxPourInfo.style.display='none';
        boxMajeureMineure.style.display='none'; 

        old_value=new_value;
        document.getElementById(new_value).checked=true;
    }    
    </script>
</BODY>
</HTML>