2 votes

Affichez un div spécifique en fonction de la valeur générée après l'envoi.

Je suis en train de mettre en place un questionneur pour certains de mes étudiants et je suis bloqué.

J'ai plusieurs questions à poser à mes étudiants. Toutes les questions sont de type oui/non et sont sélectionnées dans une liste déroulante. Le "Non" restera toujours à 0 mais le "Oui" aura un chiffre compris entre 0 et 100 pour chaque question. J'essaie d'additionner ces valeurs sélectionnées pour obtenir un total et pouvoir afficher un score/résultat.

J'ai joint le HTML et le JS pour additionner les valeurs de chacune des listes déroulantes (tout va bien jusqu'ici).

function submit() { let total=0; document.querySelectorAll('select').forEach(element => { total += parseInt(element.value); }); console.log(total); }

console.log = function(message) {
document.getElementById('result').innerHTML = message;};
console.log('');

 <p> 1. Did you attend summer training?

    <select id="select1">
        <option value="0">NO</option>
        <option value="9">YES</option>
    </select>
</p>

<p> 2. Have you passed all your grades?

    <select id="select2">
        <option value="0">NO</option>
        <option value="22">YES</option>
    </select>
</p>

<p> 3. Have you completed summer assignments?

    <select id="select3">
        <option value="0">NO</option>
        <option value="37">YES</option>
    </select>
</p>

<button onclick="submit()">Submit</button>

<div id="result"></div> 

Mon dernier obstacle est qu'en fonction du résultat final, c'est-à-dire lorsque j'appuie sur le bouton "Envoyer", je veux afficher une division spécifique avec du texte juste en dessous du résultat/de la note pour chaque plage de notes (c'est-à-dire tout résultat compris entre 0-20, 20-40, 40-60, 60-100). Par exemple, si le résultat se situe entre 20 et 30. Je veux afficher une division spécifique sous le résultat qui aura un texte explicatif et le reste des divisions pour chaque gamme de score sera caché.

Je ne suis pas très versé dans les JS et j'apprécierais un peu d'aide ou de conseils. J'ai ajouté mon code pour référence

1voto

Si vous voulez prédéfinir le texte en html, vous pouvez le faire comme suit :

HTML

<div id="0-20" class="hidden">some text</div>
<div id="20-40" class="hidden">some text</div>
<div id="40-60" class="hidden">some text</div>
<div id="60-100" class="hidden">some text</div>

CSS :

.hidden { display: none; }

il suffit alors de supprimer la classe "hidden" de la cible souhaitée, avec JS :

document.getElementById("40-60").classList.remove("hidden")

1voto

shahemm Points 11

Vous êtes ici :

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <p>
      1. Did you attend summer training?

      <select id="select1">
        <option value="0">NO</option>
        <option value="9">YES</option>
      </select>
    </p>

    <p>
      2. Have you passed all your grades?

      <select id="select2">
        <option value="0">NO</option>
        <option value="22">YES</option>
      </select>
    </p>

    <p>
      3. Have you completed summer assignments?

      <select id="select3">
        <option value="0">NO</option>
        <option value="37">YES</option>
      </select>
    </p>

    <button onclick="submit()">Submit</button>

    <div id="result"></div>
    <div id="comment"></div>
  </body>
</html>

<script>
  function submit() {
    let total = 0;
    document.querySelectorAll("select").forEach((element) => {
      total += parseInt(element.value);
    });
    console.log(total);
    document.getElementById("result").innerHTML = total;

    if (0 < total && total < 20) {
      document.getElementById("comment").innerHTML = "so bad";
    } else if (20 < total && total < 40) {
      document.getElementById("comment").innerHTML = "bad";
    } else if (40 < total && total < 60) {
      document.getElementById("comment").innerHTML = "ok";
    } else if (60 < total && total < 100) {
      document.getElementById("comment").innerHTML = "Great!";
    } else null;
  }
</script>

0voto

Mohit Swami Points 31

Vous pouvez utiliser le switch case pour cela. Premièrement, ajoutez des DIVs juste en dessous de la div résultat dans le html comme ci-dessous.

<div style="display:none" id="mess1"> Message 1 </div> 
<div style="display:none" id="mess2"> Message 2 </div> 
<div style="display:none" id="mess3"> Message 3 </div>
<div style="display:none" id="mess4"> Message 4 </div>

Puis ajoutez le switch case en javascript comme ci-dessous.

switch(true){
   case total <= 20 : document.getElementById('mess1').style.display = 'block';
   break;

   case total >= 20 && total <= 40 : document.getElementById('mess2').style.display = 'block';
   break;

   case total >= 40 && total <= 60 : document.getElementById('mess3').style.display = 'block';
   break;

   case total >= 60 && total =< 100 : document.getElementById('mess4').style.display = 'block';
   break;

}

Le code complet ressemble donc à ce qui suit.

<p> 1. Did you attend summer training?

    <select id="select1">
        <option value="0">NO</option>
        <option value="9">YES</option>
    </select>
</p>

<p> 2. Have you passed all your grades?

    <select id="select2">
        <option value="0">NO</option>
        <option value="22">YES</option>
    </select>
</p>

<p> 3. Have you completed summer assignments?

    <select id="select3">
        <option value="0">NO</option>
        <option value="37">YES</option>
    </select>
</p>

<button onclick="submit()">Submit</button>

<div id="result"></div> 
<div style="display:none" id="mess1"> Message 1 </div> 
<div style="display:none" id="mess2"> Message 2 </div> 
<div style="display:none" id="mess3"> Message 3 </div>
<div style="display:none" id="mess4"> Message 4 </div>
<script>
function submit() { 
    let total=0; 
    document.querySelectorAll('select').forEach(element => { 
      total += parseInt(element.value);
     });
    console.log(total); 
    switch(true){
       case total <= 20 : document.getElementById('mess1').style.display = 'block';
       break;

       case total >= 20 && total <= 40 : document.getElementById('mess2').style.display = 'block';
       break;

       case total >= 40 && total <= 60 : document.getElementById('mess3').style.display = 'block';
       break;

       case total >= 60 && total <= 100 : document.getElementById('mess4').style.display = 'block';
       break;

    }
}

console.log = function(message) {
document.getElementById('result').innerHTML = message;};
console.log('');
</script>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X