Rapport : Programmation d'un questionnaire en javascript
Pour cet exercice, il s'agissait de programmer un questionnaire en JavaScript. Je me suis donné 3 objectifs :
- Définition de fonctions paramétrables.
- Appel à ces fonctions par l'intermédiaire d'évènements.
- Création de fenêtres de navigateur supplémentaires.
J'ai utilisé comme support des exercices de trigonométrie qui pouvaient se comprendre simplement par l'intermédiaire d'une illustration. Pour chaque exercice, l'utilisateur peut afficher l'énoncé ou l'aide de la question en appuyant sur un bouton. Ces différentes informations sont placées dans une nouvelle fenêtre créée avec une fonction à laquelle on envoie le texte à afficher, le type de fenêtre (aide ou énoncé) et le numéro de la question.
Les réponses de l'utilisateur sont calculées en comptabilisant le nombre de réponses justes et fausses par l'incrémentation de deux variables dès qu'il clique sur une case à cocher.
Les résultats sont ensuite affichés dans une autre fenêtre créée par une fonction spécifique.
Les limites de ce questionnaire
Il y aurait deux problèmes précis à régler.
- Le premier concerne le mode d'affichage des fenêtres. En effet, si l'utilisateur ne ferme pas la fenêtre d'aide ou d'énoncé et demande une autre aide ou un autre énoncé, celui-ci s'affiche dans la fenêtre déjà ouverte. Mais celle-ci se trouve alors généralement cachée dérrière la fenêtre active (celle du questionnaire) et ne revient pas au premier plan. Il existe une option "always raised" pour la création de fenêtre mais elle nécessite l'utilisation de "netscape signed script" (JavaScript Object Road Map and compatibility guide, Danny Goodman), ce qui aurait rendu cette page dépendante d'un type de browser.
Une autre solutions possibles serait d'incrémenter une variable à chaque appel de la fonction et d'ajouter cette variable au nom de la fenêtre ouverte par la fonction (fenêtre1, fenêtre2, ...). Toutefois, en réglant un problème, cette solution en pose un autre : la mutiplication des fenêtres et la consommation des ressources machine si l'utilisateur ne ferme pas les fenêtres qui s'ouvrent au fur et à mesure.
- Le deuxième problème concerne la comptabilisation des résultats. En effet, les variables "réponses justes" et "réponses fausse" sont incrémentées quand l'utilisateur clique sur un case à cocher. Hors, si l'utilisateur choisi une réponse puis se ravise et décoche cette case, il a cliqué 2 fois. La variable correspondante est donc incrémentée de 2 points au lieu d'être diminuée d'une unité. Cette solution n'est donc pas très adaptée à la situation. Au lieu d'utiliser l'évènement onClick, il faudrait vérifier si la case est cochée ou non en utilisant l'objet checkbox.value. Cela rend toutefois le traitement des résultats un peu plus compliqué.
Problèmes rencontrés
- Mon problème majeur pour corriger mon programme a été l'utilisation des majuscules. En effet, JavaScript est sensible au changement de casse (majuscule, minuscule), ce qui n'est pas le cas d'autres langages. J'ai mis un certains moment à le comprendre et j'ai perdu un peu de temps.
- Un autre problème moins important (car plus vite compris et résolu) concerne l'initialisation des variables. Une fois définie par la commande "var" une variable contient la valeur "undefined" si on ne lui assigne pas un contenu. Il faut donc penser à initialiser les variables numériques avant de les utiliser dans un calcul. J'ai eu ce problème pour la comptabilisation des réponses. L'expression "RepJuste = RepJuste + 1;" ne fonctionnait pas parce que RepJuste n'était pas initialisé à 0 au commencement. J'obtenai donc l'expression "NaN" lorsque j'essayais d'afficher le contenu de la variable à l'écran. C'est une des différences de JavaScript avec PhP par exemple qui associe automatiquement 0 -zéro- à une variable lors de sa première utilisation (ou "" -vide- s'il s'agit d'un string).