Score qcm

Fermé
js - 9 janv. 2015 à 23:03
 js - 12 janv. 2015 à 19:26
Bonjour,

je dois réaliser un qcm avec html et javascript.J'ai deja fait la définition du formulaire,j'ai mis les boutons et les questions,mais là où je bloque c'est pour le calcul du score avec javascript.

Merci d'avance!

5 réponses

jordane45 Messages postés 38149 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 29 avril 2024 4 651
Modifié par jordane45 le 12/01/2015 à 03:44
Bonjour,

Ton souci vient du fait que tu as utilisé des attributs NAME dans tes éléménts HTML alors qu'avec Javascript... il faut utiliser ID

 <form name="formulaire">
       <label>1) Dans quel continent se trouve la France?</label><br/><br/>
    <input type="checkbox" name="europe" id="europe">Europe<br/><br/>
    <input type="checkbox" name="asie" id="asie">Asie<br/><br/>
<!--etc... -->




Cordialement,
Jordane
1
jordane45 Messages postés 38149 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 29 avril 2024 4 651
10 janv. 2015 à 00:35
Bonjour
le problème. .. c'est qu'en le faisant en javascript. . N'importe qui pourra voir les réponses en regardant le code source de la page. ..

mais bon. ..quoi qu'il en soit. ..si tu veux de l'aide il faut que tu nous donnes ton code.

0
Le voici:
    <html>
     <head>
     <meta charset="utf8">
      <title>QCM</title>
   <script language="javascript">
      function score()
     { var s=0;
       if(document.formulaire.europe.checked)
    {
         s=s+2}
     
      if(document.formulaire.asie.checked)
      {
         s=s-2;
      }
     
      
      if (document.formulaire.pres3.checked)
      {
        s=s+2;
     }
     
      if ((document.formulaire.pres1.checked)||(document.formulaire.pres2.checked))
      {
          s=s-2;
       }
      
     
     if((document.formulaire.rome.checked)&&(document.formulaire.londres.checked)&&(document.formulaire.newyork.checked)&&(document.formulaire.madrid.checked))
     {
        s=s+8;
      }
       if((document.formulaire.paris.checked)||(document.formulaire.lyon.checked)||(document.formulaire.toulouse.checked))
        {  s=s-2;
       }
      
       if((document.formulaire.paris.checked)&&(document.formulaire.lyon.checked)&&(document.formulaire.toulouse.checked))
             {s=s-6;
       }
     
     
     
     alert('Votre score est de  '+s+' point(s)!');
     }
      
        
   </script>
 </head>
     <body>
     <h2><u>QCM:</u></h2>
     <form name="formulaire">
       <label>1) Dans quel continent se trouve la France?</label><br/><br/>
    <input type="checkbox" name="europe">Europe<br/><br/>
    <input type="checkbox" name="asie">Asie<br/><br/>
    <label>2) Qui est l'actuel  président de la France?</label><br/><br/>
    <input type="checkbox" name="pres1">Jacques Chirac<br/><br/>
    <input type="checkbox" name="pres2">Nicolas Sarkozy<br/><br/>
    <input type="checkbox" name="pres3">François Hollande<br/><br/>
    <label>3) Lesquelles parmis ces villes ne sont pas françaises?</label><br/><br/>
    <input type="checkbox" name="paris">Paris<br/><br/>
    <input type="checkbox" name="rome">Rome<br/><br/>
    <input type="checkbox" name="madrid">Madrid<br/><br/>
    <input type="checkbox" name="londres">Londres<br/><br/>
    <input type="checkbox" name="toulouse">Toulouse<br/><br/>
    <input type="checkbox" name="newyork">New York<br/><br/>
    <input type="checkbox" name="lyon">Lyon<br/><br/>
    
    <input type="button" value="Valider" onClick="score();">
  </form>
 </body>
</html>
0
D'accord!Mais si je mets l'attribut "id" ça va changer quoi?
0
jordane45 Messages postés 38149 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 29 avril 2024 4 651
12 janv. 2015 à 03:16
Tu peux le gérer aussi avec l'attribut name... mais j'ai vraiment moins....

Perso, en utilisant les ID j'aurais fait ainsi :
 function score(){
var s=0;

// Question 1
var Rep1 = document.getElementById('europe');
var Rep2 = document.getElementById('asie');

if(Rep1.checked){s=s+2;}
if(Rep2.checked){s=s-2;}

//Question 2
var Pres1 =document.getElementById('pres1');
var Pres2 =document.getElementById('pres2');
var Pres3 =document.getElementById('pres3');

if(Pres3.checked){s=s+2;}
if(Pres2.checked){s=s-2;}
if(Pres1.checked){s=s-2;}

//etc...

   alert('Votre score est de  '+s+' point(s)!');
}




Une autre solution, cette fois en utilisant les attributs NAME peut être trouvée ici :
https://forums.commentcamarche.net/forum/affich-16037778-faire-un-qcm-avec-javascript#4
=> à adapter à ton questionnaire bien entendu.


Nb : Pour tes questions tu as utilisés des cases à cochées.. alors que tu n'attends qu'une réponse possible... pourquoi ne pas avoir utiliser de bouton radio ?

Nb2 : Tu pourrais aussi "stocker" la valeur des réponses ( le nombre de points) dans l'attribut VALUE des des Inputs ....

       <label>1) Dans quel continent se trouve la France?</label><br/><br/>
    <input type="checkbox" value="2"  name="Q1" = id="europe">Europe<br/><br/>
    <input type="checkbox" value="-2" name="Q1" id="asie">Asie<br/><br/>
<!--etc... -->


De cette façon , en utlisant le même NAME pour ta question 1 ... tu pourrais boucler dessus et récupérer les points directement dans la VALUE
un truc du genre :
 function score(){
  var NbQuestions=3;
  var s=0;
   for(n=1;n<=NbQuestions;n++){
     reponse=s+document.getElementsByName("Q"+n);
      for (r=0;r<=reponse.length;r++){
       if(reponse[r].checked==true){
         s=s+ parseFloat(reponse[r].value);
       }
     }
    }
 alert('Votre score est de  '+s+' point(s)!');
}



Nb3 : Par conte, comme je te l'ai dit précédement.. l'utilisation de javascript pour réaliser un questionnaire implique que n'importe qui peut regarder le code source de la page et savoir quelles sont les bonnes réponses à cocher...
Une des solutions pour éviter ça.. serait de gérer ton questionnaire en PHP...
L'idéal même serait de pouvoir gérer ta liste de questions (et de réponses..et le nombre de points qu'elles valent) dans une Base de données..... ( mais là.. c'est un autre sujet! )
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
D'accord!Je pense que je vais gérer les scores en utilisant l'attribut id,cela me parait plus simple.Par contre,j'ai pas encore fait de php,c'est pourquoi je ne l'ai pas utilisé.
Merci de m'avoir aidé!
0