Voir aussi
Dans la même rubrique :
Analyser les réponses à une liste de questions
Tri et Histogramme
Tirage du lotoDu même auteur :
Créer une liste de QCMMême indexation :
Technique Web
MARST - Le Moteur Automatisé de Recherche en Santé au Travail
Page contact en PHP 1/3
Initiation au xhtml - 1
Comment faire migrer son site ?
Comment intégrer Snap Shots à Rapidweaver ?
Un serveur dédié pour les nuls
Quand JavaScript est désactivé... 1/2
Page contact en PHP 3/3
Le web structuré et sa présentation
Créer un forum à l’aide de phpBB
Conseils pour débuter un site web
Page Erreur 404 en PHP
Un Editeur RSS pour votre site 1/2
Réaliser un formulaire de contact (5/4)
Gestion d’une rubrique... en attendant SPIP
La Netiquette des forums
Menu de navigation sans JavaScript
Un Editeur RSS pour votre site 2/2
Réaliser un formulaire de contact (4/4)
Belles icônes pas chères !
Qualité, centres d’intérêt et motivations des participants aux forums médicaux.
Utilisation de la classe easyRSS
Initiation au xhtml - 2
Etablir un questionnaire statistique en ligne
Réaliser un formulaire de contact (1/4)
Réaliser un formulaire de contact (3/4)
Positionnement fixe... même avec Internet Explorer !
Javascript : n’oubliez pas Mac OS !
Réaliser un formulaire de contact (2/4)
Un lecteur RSS pour votre site 2/2
Tri et Histogramme
Page contact en PHP 2/3
Editer plusieurs fichiers de syndication 2/3
Editer plusieurs fichiers de syndication 1/3
Quiz en PHP 1/3
Soigner en ligne, un art impossible ?
xhtml - 4 : Les entités
Contrôler l’accès d’une partie du site avec .htaccess
Webmasters : Comment mieux se référencer ?
Quiz en PHP 2/3
Editer plusieurs fichiers de syndication 3/3
Mise en place d’un forum : une décision qui doit être mûrement réfléchie
Quiz en PHP 3/3
Un lecteur RSS pour votre site 1/2
Menu dépliant pour les rubriques
Installer un script PHP pour les nuls
Proposer plusieurs styles pour votre site
Quand JavaScript est désactivé... 2/2
Publication Spip : forme et typographie
Analyser les réponses à une liste de questions
Initiation au xhtml - 3 : Rappel sur les pointeurs internet (URI/URL)
Syndication, comment s’y retrouver
La syndication de contenu RSS
Ecrire ce qu’on veut dans SPIP
Lire nos fichiers de syndication
Afficher un fil RSS/Atom sur votre site 1/3
Astuce pour les images fréquemment utilisées
Afficher un fil RSS/Atom sur votre site 2/3
Afficher un fil RSS/Atom sur votre site 3/3
Lecteur RSS/Atom pour votre site 1/2
Lecteur RSS/Atom pour votre site 2/2
Lecture des caractères spéciaux et d’éléments d’un fil RSS/Atom
Syndication pour phpBB
Editez vos flux avec Fil_LE 1/2
Editez vos flux avec Fil_LE 2/2
Création à distance d’un fichier de syndication
Abandonnons RSS 0.91 !
Exécuter un Javascript dans une page SPIP
Des fils RSS 1.0, RSS 2.0 et Atom 1.0 pour votre site SPIP
Accueil
Boite à Outils
Javascripts de Joël LeMontagner
Créer une liste de QCM
Pour être utilisé par des non-programmeurs, ce script ne nécessite que le changement de la variable du nombre de QCM et bien sûr l’énoncé des questions et réponses. Cette partie est délimité par des lignes d’étoiles. Le reste est automatique.
NB: les textes en rouge sont des commentaires à supprimer dans le code html
on déclare les tableaux des variables<script language="JavaScript">
var enonce_quest = new Array; l’énoncé de nos QCM
var nb_eltsform = new Array; le nombre de réponses possibles pour chaque QCM
var formans = new Array; l’énoncé des réponses
var commentaire = new Array; les commentaires de la correction à chaque énoncé
var ans = new Array; les numéros des bonnes réponses
var done = new Array; les questions faites
var panswer = new Array; les réponses de l’utilisateur
var score = 0; score à zéro
var rep = 0; nombre de réponses cochées
*************************************************
var nb_elts=2; le nombre de QCM, ici 2
var nb_elts_tot=nb_elts
enonce_quest [1]="Le javascript est " l’énoncé de la 1ére question
nb_eltsform[1]=4 le nombre de réponses possibles ici 4
formans[1]="identique au langage C " les réponses possibles, notez l’incrémentation
formans[2]="du java "
formans[3]="un langage à part "
formans[4]="identique au visual basic "
ans[1] = 3;la bonne réponse, ici la 3ème de la série
commentaire[1]="Malgré certains points communs avec d'autres, le javascript est un langage de programmation à part entiére " le commentaire (facultatif) de la correction au 1er QCM
enonce_quest [2]="le javascript"
nb_eltsform[2]=3les réponses possibles à la 2éme question, notez l’incrémentation qui se fait continuellement à partir du 1er QCM
formans[5]="se comporte de façon identique sur tous les navigateurs"
formans[6]="est compatible avec tous les navigateurs "
formans[7]="peut être désactivé par l'utilisateur "
ans[2] = 3;la bonne réponse, ici la 3éme de la série
commentaire[2]="le javascript peut être désactivé par l'utilisateur<br />son comportement peut varier selon le navigateur et aussi selon la version d'un même navigateur, voire marcher avec l'un et pas avec un autre<br />Certains navigateurs (peu répandu) ne le gérent pas"
***************************************************
function affich_pag(){ Affichage des QCM dans la page
compte3=0; toutes les variables à zéro
var compte=0
var compte2=0
inumber=3on détermine aléatoirement le numéro de la 1ére réponse possible à chaque qcm
randomnumber = Math.random() ;
rand1 = Math.round( (inumber-1) * randomnumber) + 1 ;
for (var i=1;i<=(nb_elts);i++) {document.write("<p><font color='#000000'><b><strong>"+i+" -"+enonce_quest[i]+"</strong></font></p></b><font color='#000080'><blockquote>");on affiche les énoncés
compte2=compte
trouv=0
for (var j=rand1+compte2;j<(nb_eltsform[i]+1+compte2);j++){et les réponses possibles dans un joyeux désordre un peu difficile à expliquer et réservé aux spécialistes
document.write(j-compte2-rand1+1+" - "+formans[j]+"<br />");compte++;
if (ans[i]==j-compte2 && trouv==0){
ans[i]=j-compte2-rand1+1;
trouv=1}
}
if (rand1>nb_eltsform[i]){
for (var j=compte2+1;j<(nb_eltsform[i]+1+compte2);j++){
document.write(j-compte2+" - "+formans[j]+"<br />");compte++;
if (ans[i]==j-compte2 && trouv==0){
ans[i]=j-compte2;
trouv=1}}
}
else{
if (rand1+compte2>compte2+1){for (var j=compte2+1;j<rand1+compte2;j++){
document.write(j-compte2+nb_eltsform[i]+1-rand1+" - "+formans[j]+"<br />")
compte++;
if (trouv==1){ligne=0}
if (ans[i]==j-compte2 && trouv==0){
ans[i]=j-compte2+nb_eltsform[i]+1-rand1;trouv=1}
}}
}
document.write('</font><form method="POST"><p>Cochez la bonne réponse : </font>')on affiche les cases à cocher
for (var k=1;k<(nb_eltsform[i]+1);k++){document.write(' <input type="radio" name="q" value="'+k+'"onclick="Engine('+i+',this.value)"> chaque case cochée appelle la fonction engine qui enregistre le nécessaire
<font color="#FF0000"><strong>'+k+' </strong></font>')
}
document.write('</p></form></blockquote>')}
}
function Engine(question, answer) {cette fonction enregistre les cases cochées et leurs numéros
if (answer != ans[question]) {
if (!done[question]) {
done[question] = -1;
rep++;
panswer[question]=answer;
}
else {
done[question] = -1;
panswer[question]=answer;
}
}
else {
if (!done[question]) {
done[question] = -1;
rep++;
panswer[question]=answer;
}
else {
panswer[question]=answer;
}
}}
function NextLevel () {compare les réponses de l’utilisateur aux bonnes réponses
score=0;
for (var i=1;i<(nb_elts_tot+1);i++){
if (panswer[i]==ans[i]){score++;si c’est la bonne, on incrémente le score
}
}
}
function correction() {
if (rep>= nb_elts ) {si tous les QCM sont faits
NextLevel () on calcule le score
puis on ouvre la fenêtre de correction
correc=open("","correction","toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=1,resizable=1,width=500,height=350");
correc.document.write('<BODY TEXT="#000000" BGCOLOR="#FFFFC0" LINK="#0000FF" VLINK="#800080" ALINK="#FF00FF"><b><center>VOS REPONSES!</center><br /><br />');
for (var i=1;i<(nb_elts_tot+1);i++){on affiche les numéros des questions et les réponses de l’utilisateur
correc.document.write('QUESTION <font color="#FF0000"><b><strong>'+i+' : '+panswer[i].toUpperCase()+'</font ></b></strong>');
if (panswer[i]==ans[i]){
correc.document.write(" => EXACT<br />");on peut le féliciter si c’est bon
}
else{
correc.document.write(" => FAUX<br />");
}
}
correc.document.write("VOUS AVEZ "+score+" BONNES REPONSES SUR "+nb_elts_tot+"<br /><br />");Une correction plus détaillée
correc.document.write('<b><center>CORRECTION</center><br /><br /></center>');
for (var k=1;k<(nb_elts_tot+1);k++){
correc.document.write(" QUESTION <font color='#FF0000'><b><strong>"+k+" "+enonce_quest[k]+"</font></b></strong> - la bonne réponse est :<font color='#FF0000'><b><strong>"+ans[k]+"</font></b></strong><br />"+commentaire[k]+"<br /><br />");}
correc.document.write('ATTENTION ! Si vous revenez aux questions précédentes le numéro des bonnes réponses peut changer, leur tirage étant aléatoire.</center><br /></font></b></strong></center></p><br /><hr width="75%" />');
correc.document.close();
}
else {
alert("REPONDEZ D'ABORD A TOUS LES QCM, SVP !");si tous les QCM ne sont pas faits, on se fâche
} }
// -->// End
</script>fin du script et corps de la page
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>qcm</title>
</head>
<body TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#800080" ALINK="#FF00FF">
<table border="0" cellspacing="0" width="100%">
<tr>
<p>
<script>
affich_pag()
</script> </p>
<form>formulaire dont le clic va entrainer la correction
<div align="center"><center><p><input type="button"
value=" VOS RESULTATS ET LA CORRECTION" onclick="correction()"> </p>
</center></div>
</form>