Modification de codes JavaScript
Bonjour,
J'aimerai modifier un jeu qui se présente sous la forme d'un questionnaire, qui bien que fonctionnel, présente le défaut de présenter les solutions aux questions après y avoir répondu mais avant de valider les points obtenus à ce jeu.
Par conséquent je souhaiterai que les solutions soient présentées après avoir obtenu les points.
Pour cela j'ai trouver une possibilité en modifiant le fichier JavaScript que voici et qui fait parti de la programmation de ce jeu:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164
| /* Script utilisant Ajax */
// Variables globales.
var qcm = ''; // Dossier du QCM.
var nb_q = 0; // nombre de questions dans le QCM.
var q = 1; // numéro de la question actuelle.
var rep = 0; // numéro de la réponse actuelle.
var fini = 0; // indique si le QCM est terminé (affichage du corrigé.
function reception()
{
if (http_request.readyState == 4 && http_request.status == 200)
{
var fichierxml = http_request.responseXML;
if (fini == 1) // Affichage du corrigé.
{
var question, image, explic, reponses;
var xml = fichierxml.getElementsByTagName('question').item(0);
if (xml.childNodes[0].firstChild) question = xml.childNodes[0].firstChild.data;
else question = '';
if (xml.childNodes[1].firstChild) image = xml.childNodes[1].firstChild.data;
else image = '';
if (xml.childNodes[2].firstChild) explic = xml.childNodes[2].firstChild.data;
else explic = '';
reponses = new Array;
for (i = 0; i < xml.childNodes[3].childNodes.length; i++)
{
reponses[i] = new Array;
if (xml.childNodes[3].childNodes[i].firstChild)
reponses[i][0] = xml.childNodes[3].childNodes[i].firstChild.data;
else
reponses[i][0] = '';
reponses[i][1] = xml.childNodes[3].childNodes[i].getAttribute('coul');
}
// remplissage de la page avec les données lues.
document.getElementById('c_titre').innerHTML = ':. Correction : Question '+q+'/'+nb_q+' .:';
var html = '<div id="voir_question">'+question+'</div>';
if (image != '') html += '<div id="voir_image"><img alt="" src="qcm/'+qcm+'/'+image+'" /></div>';
if (explic != '') html += '<div id="voir_explic">'+explic+'</div>';
html += '<div id="voir_reponses">';
rep = 0;
for (i = 0; i < reponses.length; i++)
{
html += '> <a class="'+reponses[i][1]+'">'+reponses[i][0]+'</a><br />';
}
html += '</div>';
document.getElementById('c_cadre').innerHTML = html;
if (q > 1) document.getElementById('bout_0').innerHTML = '<a href="javascript:c_prec();">Question précédante</a>';
else document.getElementById('bout_0').innerHTML = 'Question précédante';
if (q < nb_q) document.getElementById('bout_1').innerHTML = '<a href="javascript:c_suiv();">Question suivante</a>';
else document.getElementById('bout_1').innerHTML = 'Question suivante';
return 0;
}
if (fichierxml.getElementsByTagName('bonnesreponses').item(0) != null)
{
// Le QCM est fini, on affiche le nombre de bonnes réponses.
var bonnes_rep = fichierxml.getElementsByTagName('bonnesreponses').item(0).firstChild.data;
document.getElementById('c_cadre').innerHTML = '<div id="voir_result"><img src="interface/vert.gif" alt="" height="15" width="'+Math.floor(bonnes_rep*200/nb_q)+'" class="no_border_droite" /><img src="interface/rouge.gif" alt="" height="15" width="'+Math.floor((nb_q-bonnes_rep)*200/nb_q)+'" class="no_border_gauche" /><br /><br />Bonnes réponses : '+bonnes_rep+'/'+nb_q+'</div>';
document.getElementById('c_titre').innerHTML = ':. Résultats .:';
document.getElementById('bout_1').innerHTML = '<a href="javascript:corrige();">Voir le corrigé</a>';
return 0;
}
// On récupère les données de la question.
var question, image, explic, reponses;
var xml = fichierxml.getElementsByTagName('question').item(0);
if (xml.childNodes[0].firstChild) question = xml.childNodes[0].firstChild.data;
else question = '';
if (xml.childNodes[1].firstChild) image = xml.childNodes[1].firstChild.data;
else image = '';
if (xml.childNodes[2].firstChild) explic = xml.childNodes[2].firstChild.data;
else explic = '';
reponses = new Array;
for (i = 0; i < xml.childNodes[3].childNodes.length; i++)
{
if (xml.childNodes[3].childNodes[i].firstChild) reponses[i] = xml.childNodes[3].childNodes[i].firstChild.data;
else reponses[i] = '';
}
// remplissage de la page avec les données lues.
document.getElementById('c_titre').innerHTML = ':. Question '+q+'/'+nb_q+' .:';
var html = '<div id="voir_question">'+question+'</div>';
if (image != '') html += '<div id="voir_image"><img alt="" src="qcm/'+qcm+'/'+image+'" /></div>';
if (explic != '') html += '<div id="voir_explic">'+explic+'</div>';
html += '<div id="voir_reponses">';
rep = 0;
for (i = 0; i < reponses.length; i++)
{
html += '<input type="radio" name="rep"'+((i == rep) ? ' checked="checked"' : '')+' onclick="javascript:rep='+i+';" /> '+reponses[i]+'<br />';
}
html += '</div>';
document.getElementById('c_cadre').innerHTML = html;
document.getElementById('bout_1').innerHTML = '<a href="javascript:suiv();">Valider</a>';
}
}
function envoie_req(req)
{
// création du XMLHttpRequest et envoie d'une requête.
if (window.XMLHttpRequest)
{
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType) http_request.overrideMimeType('text/xml');
}
else if (window.ActiveXObject)
{
try { http_request = new ActiveXObject("Msxml2.XMLHTTP") }
catch (e)
{
try { http_request = new ActiveXObject("Microsoft.XMLHTTP") }
catch (e) {}
}
}
if (!http_request) alert('Erreur : Impossible d'initialiser XMLHttpRequest.');
http_request.onreadystatechange = reception;
http_request.open('POST', 'voir_ajax.php', true);
http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
http_request.send(req);
}
function init(nb_questions, dossier_qcm)
{
nb_q = nb_questions;
qcm = dossier_qcm;
document.getElementById('bout_1').innerHTML = 'Valider'; // On masque le bouton jusqu'à reception des données.
envoie_req(null);
}
function suiv()
{
q ++;
document.getElementById('bout_1').innerHTML = 'Valider'; // On masque le bouton jusqu'à reception des données.
envoie_req('rep='+rep);
}
function corrige()
{
q = 1;
fini = 1;
document.getElementById('bout_1').innerHTML = ''; // On masque le bouton jusqu'à reception des données.
envoie_req('q='+q);
}
function c_suiv()
{
q ++;
document.getElementById('bout_0').innerHTML = 'Question précédante'; // On masque le bouton jusqu'à reception des données.
document.getElementById('bout_1').innerHTML = 'Question suivante'; // On masque le bouton jusqu'à reception des données.
envoie_req('q='+q);
}
function c_prec()
{
q --;
document.getElementById('bout_0').innerHTML = 'Question précédante'; // On masque le bouton jusqu'à reception des données.
document.getElementById('bout_1').innerHTML = 'Question suivante'; // On masque le bouton jusqu'à reception des données.
envoie_req('q='+q);
} |
Mon idée consisterait à modifier la ligne 64 que voici:
Code:
document.getElementById('bout_1').innerHTML = '<a href="javascript:corrige();">Voir le corrigé</a>';
>Voir le corrigé</a> devrait être remplacé par:
>Validez vos points</a>
ainsi que d'autres éléments que je ne maîtrise pas sur cette ligne pour qu'en cliquant sur "Validez vos points", cela conduirait sur une page PHP afin valider les points obtenus en base de donnée.
Ensuite lorsque les points sont validés en base de données par cette page PHP il se produirait un retour au fichier JavaScript à la ligne 142 (function corrige() ) pour voir alors la solution ou corrigé.
En résumé, il faudrait intercaler la validation des points entre le moment où le joueur à répondu à l'ensemble des questions et le moment où il peut voir la solution.
Merci d'avance pour votre aide.
A+