Bonjour,
Je posséde un script (libre)pour un QCM mais le soucis,le concepteur ne soutient plus son script.
Il est en deux parties, le test (liste.html) et score.html.
Dans ce script:
1) je souhaiterai y ajouter un bouton "précédent" afin de revenir en arrière sur les questions du QCM avant de valider le test.
2) Concernant l'affichage du score je souhaiterai modifier celui-ci.Je voudrai connaître le nombre de bonnes réponses cochées (=+1 pt),le nombres de mauvaises réponses cochées.(= -1/3 pt).Afin d'afficher une note sur 20
Voilà le script:
Liste.html <HTML>
<! xmltest -->
<HEAD>
<SCRIPT LANGUAGE="JAVASCRIPT">
/* script written by olives jean-michel
jmolives@hotmail.com
*/
var id=null;
var iMontrerBoutonScore=0;
var QuestionNumero=1;
var ReponseNumero =0;
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// function qui utilise le DOM pour atteindre les attributs
function ShowAttributes()
{
// variable qui permet de compter les numeros
var AttributNumero=0;
// compteur des reponses
ReponseNumero=0;
// si =0 , la question est fausse
var iScoreSurPage =1;
Document=dsoInventaire.XMLDocument;
//alert( Document.documentElement.childNodes(QuestionNumero-2).text);
//alert( " question numero " + (QuestionNumero-2));
var items=Document.documentElement.childNodes(QuestionNumero-2)
// la question -- ne nous interesse pas
var treeNode=items.firstChild;
//alert("firstchild is " + treeNode.xml);
// les reponses: voir si elles sont vraies ou fausses
while(treeNode!=items.lastChild)
{
treeNode=treeNode.nextSibling;
//alert("treeNode is:" +treeNode.xml);
// degager l'attribut
var att=treeNode.attributes;
//alert("texte de l'attribut" + att.getNamedItem("BR").nodeValue);
var Reponse =att.getNamedItem("BR").nodeValue
// examiner si la bonne case a ete cochee
//if((document.TB1.C1[AttributNumero].checked)&& Reponse="1") || (!document.LIVREINVENTAIRE2.C1[AttributNumero].checked)&& Reponse="0"))
if(((document.tb1.C1[AttributNumero].checked) && Reponse=="1") ||( (!document.tb1.C1[AttributNumero].checked) && Reponse=="0"))
{
//alert("bonne reponse sur question numero " + AttributNumero);
}
else
{
//alert("mauvaise reponse sur question numero " + AttributNumero);
iScoreSurPage =0;
}// fin du if
// passer a l'attribut suivant
AttributNumero++;
}// fin du while
// examiner les resultats de la feuille
if (iScoreSurPage==1)
{
parent.score++;
//alert("bonnes reponses sur la page");
// remettre le compteur score de la page a 1
iScoreSurPage =1;
}// fin du (if (iScoreSurPage ==1))
}
//******************************************************************************
function CacheCheckVide( )
{
////////////////////////////////////////////////////////////
// Si un checkbox est vide //
// Le masquer //
/*
alert (TESTCK1.innerText);
alert (TESTCK2.innerText);
alert (TESTCK3.innerText);
alert (TESTCK4.innerText);
alert (TESTCK5.innerText);
*/
Document=dsoInventaire.XMLDocument;
var items=Document.documentElement.childNodes(QuestionNumero-1)
// la question -- ne nous interesse pas
var treeNode=items.firstChild;
//alert("firstchild is " + treeNode.xml);
// les reponses: voir si elles sont vraies ou fausses
while(treeNode!=items.lastChild)
{
// incrementer les reponses
ReponseNumero++;
treeNode=treeNode.nextSibling;
//alert("treeNode is:" +treeNode.text);
//alert( 'Reponse numero ' + ReponseNumero);
// verifier si la reponse est vide, si oui supprimer le checkbox
if((""==treeNode.text))
{
//alert('reponse vide= ' + ReponseNumero);
switch(ReponseNumero)
{
case 1: ANSWER1.style.display = "none"; break;
case 2: ANSWER2.style.display = "none"; break;
case 3: ANSWER3.style.display = "none"; break;
case 4: ANSWER4.style.display = "none"; break;
case 5: ANSWER5.style.display = "none"; break;
}// fin de switch (ReponseNumero)
}// fin de if(treeNode.xml="")
}// fin du while
ReponseNumero=0;
/*
if ((TESTCK5.innerText)=="")
{
ANSWER5.style.display = "none";
//alert( "Le message devrait etre vide ,message=none");
}
else
{
ANSWER5.style.display = "";
//alert("lemessage devrait etre ecrit message=''");
}
*/
}
//******************************************
// fonction qui fait apparaitre le bouton score lors de la derniere question
function disappear(obj)
{
if (!iMontrerBoutonScore) obj.style.display = "none";
else
{
obj.style.display = "";
BoutonSuivant.style.display="none";
}
}
//*************************************************************************
function affiche()
{
var res;
QuestionNumero++;
QN.innerText=QuestionNumero;
if( (dsoInventaire.recordset.EOF))
{
dsoInventaire.recordset.moveLast();
}
// Montrer le bouton score pour la derniere question
if (dsoInventaire.recordset.RecordCount==QuestionNumero)
{
// montrer le bouton score
iMontrerBoutonScore=1;
disappear(BoutonScore);
}
if( (dsoInventaire.recordset.BOF))
{
dsoInventaire.recordset.moveFirst();
}
// voir lequel a ete clique:
ShowAttributes();
}// fin function affiche()
//****************************************************
// fonction qui reinitalise tous les boutons radios
function Reinitialise()
{
var combien= document.tb1.C1.length;
// voir lequel a ete clique:
var lequel;
for ( x=0; x<combien;x++)
{
document.tb1.C1[x].checked=false;
}
//faire reapparaitre tous les boutons
ANSWER1.style.display = "";
ANSWER2.style.display = "";
ANSWER3.style.display = "";
ANSWER4.style.display = "";
ANSWER5.style.display = "";
}// fin function Reinitialise()
var temps=0;
//)))))))))))))))))))))))))))))))))))))
function depart()
{
id=setInterval("Montre()",1000);
}
//****************************************
function stopp()
{
window.clearInterval(id);
}
//var parent.msec=0;
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function Montre()
{
if( parent.msec>59)
{
parent.msec=0;
parent.minutes++;
/* Pour changer le temps de l'epreuve, modifier ici
if(parent.minutes>=1)
parent.MontrePageScore();
*/
}
var ms="";
ms+=parent.msec;
parent.msec++;
document.FTEMPS.ZoneTemps.value= parent.minutes + " : " + ms;
document.cookie="mns=" + parent.minutes + ";secs=" + ms + ";"
}
</SCRIPT>
<TITLE> QUESTIONNAIRE </TITLE>
</HEAD>
<body onLoad="depart();parent.msec=0;parent.score=0;parent.minutes=0;parent.NombreQuestions=dsoInventaire.recordset.RecordCount;disappear(BoutonScore);QN.innerText=QuestionNumero; CacheCheckVide( );">
<XML ID="dsoInventaire" SRC="TOXML1.xml"></XML>
<p align="center">
<b><font size="2">Question
<SPAN ID="QN">
</SPAN>
</font></b>
</p>
<form name="tb1" >
<table ID="LIVREINVENTAIRE" DATAPAGESIZE=1 DATASRC=#dsoInventaire BORDER="0" CELLPADDING="2">
<tr>
<td width="100%">
<h2><SPAN DATAFLD="QUESTION"></SPAN></h2><p><p>
</td>
</tr>
</table>
<SPAN ID="ANSWER1" >
<table ID="LIVREINVENTAIRE2" DATAPAGESIZE=1 DATASRC=#dsoInventaire DATAFLD="REPONSE1" BORDER="0" CELLPADDING="2">
<tr>
<td width="100%">
<input type="checkbox" name="C1" value="ON"><SPAN ID="TESTCK1" DATAFLD="$TEXT" ></SPAN>
</td>
</tr>
</table>
</SPAN>
<SPAN ID="ANSWER2" >
<table ID="LIVREINVENTAIRE3" DATAPAGESIZE=1 DATASRC=#dsoInventaire DATAFLD="REPONSE2" BORDER="0" CELLPADDING="2">
<tr>
<td width="100%">
<input type="checkbox" name="C1" value="ON"><SPAN ID="TESTCK2" DATAFLD="$TEXT" ></SPAN>
</td>
</tr>
</table>
</SPAN>
<SPAN ID="ANSWER3" >
<table ID="LIVREINVENTAIRE4" DATAPAGESIZE=1 DATASRC=#dsoInventaire DATAFLD="REPONSE3" BORDER="0" CELLPADDING="2">
<tr>
<td width="100%">
<input type="checkbox" name="C1" value="ON"><SPAN ID="TESTCK3" DATAFLD="$TEXT" ></SPAN>
</td>
</tr>
</table>
</SPAN>
<SPAN ID="ANSWER4" >
<table ID="LIVREINVENTAIRE5" DATAPAGESIZE=1 DATASRC=#dsoInventaire DATAFLD="REPONSE4" BORDER="0" CELLPADDING="2">
<tr>
<td width="100%">
<input type="checkbox" name="C1" value="ON"><SPAN ID="TESTCK4" DATAFLD="$TEXT" ></SPAN>
</td>
</tr>
</table>
</SPAN>
<SPAN ID="ANSWER5" >
<table ID="LIVREINVENTAIRE6" DATAPAGESIZE=1 DATASRC=#dsoInventaire DATAFLD="REPONSE5" BORDER="0" CELLPADDING="2" >
<tr>
<td width="100%">
<input type="checkbox" name="C1" value="ON"><SPAN ID="TESTCK5" DATAFLD="$TEXT" ></SPAN>
</td>
</tr>
</table>
</SPAN>
</form>
<!-- Boutons de navigation -->
<p>
<SPAN ID="BoutonSuivant">
<INPUT TYPE= "BUTTON" onClick="affiche();Reinitialise();LIVREINVENTAIRE.nextPage();if (dsoInventaire.recordset.EOF)dsoInventaire.recordset.MoveLast();else dsoInventaire.recordset.MoveNext();CacheCheckVide( ); " value="Question suivante">
</SPAN>
<SPAN ID="BoutonScore">
<INPUT TYPE= "BUTTON" onClick="affiche();parent.MontrePageScore();" value ="Score">
</SPAN>
<table border="0" width="100%">
<tr>
<td width="50%" height="132"><img src="toxml.jpg" border="0" >
</td>
<td width="50%"> <p align="center"> <font color="#0000FF"><b> Durée de l'épreuve:</b></font>
<form name="FTEMPS">
<p align="center">
<input type=TEXT name="ZoneTemps" size="6">
<b>minutes écoulées</b>
</form>
</td>
</tr>
</table>
</body>
</HTML>
Score.html:<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>New Page 1</title>
</head>
<body>
<p align="center"> </p>
<p align="center"> </p>
<p align="center"> </p>
<p align="center"> </p>
<p align="center"><font size="6" color="#0000FF"><i>Votre score:</i></font></p>
<table border="1" width="100%">
<tr>
<td width="100%">
<p align="center"><i><font color="#FF0000">
<SCRIPT LANGUAGE="JAVASCRIPT">
document.write(parent.score);
</SCRIPT>
</font> points sur un total de
<SCRIPT LANGUAGE="JAVASCRIPT">
document.write(parent.NombreQuestions);
</SCRIPT>
</i></td>
</tr>
</table>
<p align="center"><a href="CorrigeTest.htm">Voir le corrigé</a></p>
</body>
</html>
Merci à vous.