|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : février 2010 Messages : 5 ![]() |
Bonjour à tous !
Plus que débutant, je travail via le logiciel eXelearning à l'élaboration de cours QCM et autre moyen pédagogique pour un centre de formation. Le logiciel génère du code html et javascript. Je souhaiterais vérouiller le nombre de réponse possible lors des tests de controle. Je m'explique, lors d'un QCM par exemple on peut cocher les case à plusieur reprise jusqu'à obtenir la bonne réponse. Peut grace à java, n'autoriser qu'une seule action ? Merci de vos avis et reponses. |
|
|
02
|
|
|
#2 | ||
|
Membre Expert
![]() Matilin TorreÉtudiant Inscription : juin 2010 Messages : 679 ![]() |
Je mets -1 pour le titre de topic qui sert à rien, et parce que c'est JavaScript, pas Java.
Pour ton problème, comment souvent, il y a plusieurs façons de faire. Une est simple mais fastidieuse, car il faut rajouter un attribut dans le code HTML de chaque bouton radio. Une autre, reposant sur la délégation d'évènements, serait plus élégante mais plus complexe. Je te propose la première. Je commence par créer une fonction qui va désactiver tous les boutons de même nom : Code JS :
Ensuite, il faudra rajouter un appel à cette fonction sur chaque bouton radio : Code HTML :
<input type="radio" ... onclick="desactiver(this.name);" /> Si tu te sens d'attaque pour la solution « plus élégante », y'a qu'à demander Autre chose : je sais, de ma propre expérience, que le e-learning se soucie parfois peu de la sécurité des questionnaires. Mais il faut que tu saches qu'une vérification côté client n'est pas suffisante. Par exemple, avec une console JavaScript (il y en a dans tous les navigateurs actuels), il suffit de taper un tout petit bout de code pour casser la protection que je viens de te donner. L'idéal serait de faire une requête auprès du serveur (avec ou sans Ajax) quand l'utilisateur propose une réponse, et de s'assurer, côté serveur, qu'il ne pourra pas proposer une autre réponse par la suite.
__________________
Disposition de clavier ergonomique française : Bépo |
||
|
|
10
|
|
|
#3 |
|
Invité de passage
![]() Inscription : février 2010 Messages : 5 ![]() |
Merci beaucoup de ces precieuses informations.
Je suis partant pour la solution "elegante" manière de tester tout ça. Merci aussi pour l'astuce de securité. Je n'y avait effectivement pas pensé. |
|
|
10
|
|
|
#4 | ||||||||
|
Membre Expert
![]() Matilin TorreÉtudiant Inscription : juin 2010 Messages : 679 ![]() |
Pour la seconde solution,
l'idée c'est d'utiliser un gestionnaire d'évènement addEventListener, en surveillant non pas chaque input, mais le formulaire qui les contient tous. C'est ça qu'on appelle la délégation. Pour que ça marche, il faut qu'il y ait dans le code HTML au moins le <form> et les <input>, mais je te mets des balises en bonus pour améliorer la sémantique et l'accessibilité. Code HTML :
La fonction en elle-même est très courte, et tu reconnaîtras une partie commune avec la première solution : Code JS :
De même, il faut prendre en compte IE<9 au moment d'attacher le gestionnaire : Code JS :
Note le 3e paramètre false de la méthode standard, qui ne sert (presque) à rien mais qui est obligatoire ![]() Le gros avantage de cette méthode, c'est que le script n'est plus intrusif : il n'apparaît plus du tout dans le code HTML, ce qui rend la maintenance plus facile. C'est le même principe que déclarer les styles dans une feuille CSS externe. Pour faire les choses bien jusqu'au bout, on déclare les scripts dans le <head>. Mais ça pose un problème : au moment où les scripts sont exécutés, le contenu de la page n'existe pas encore… Pour pallier ce problème, on retarde l'exécution des scripts, en les plaçant dans un gestionnaire de l'évènement load de la page. Voilà ce que ça donne au final, si on place le code dans le <head> : Code JS :
__________________
Disposition de clavier ergonomique française : Bépo |
||||||||
|
|
20
|
|
|
#5 | |
|
Expert Confirmé Sénior
![]() Romain VALERIPOOête Inscription : avril 2008 Messages : 2 572 ![]() |
Citation:
>>> Watilin for President !
__________________
...pour les linguistes et les curieux >>> générateur de phrases aléatoires __________________ |
|
|
|
00
|
|
|
#6 |
![]() ![]() Inscription : janvier 2011 Messages : 2 942 ![]() |
Très belle explication +1
il me semble qu'il manque e = e || event;en début de fonction gererClic au cas ou l'event ne soit pas passé à la fonction. |
|
|
00
|
|
|
#7 | |
|
Membre Expert
![]() Matilin TorreÉtudiant Inscription : juin 2010 Messages : 679 ![]() |
Arrêtez je vais prendre la grosse tête '^^
Citation:
__________________
Disposition de clavier ergonomique française : Bépo |
|
|
|
00
|
|
|
#8 | |
![]() ![]() Inscription : janvier 2011 Messages : 2 942 ![]() |
Citation:
Ceci devient de plus en plus fréquent lorsque l'on met l'initialisation en fin de page, pour être sur que les éléments sont présent dans le DOM et éviter les attachEvent et addEventListener, c'est pour cela que j'ai tendance à le mettre systématiquement. mais non, cela vaut quand même bien une
|
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com