Vous n'êtes pas connecté.


Hello,
je suis à court d'idées ...
j'ai sur un site une page de QCM (un formulaire de checkbox) et je voudrais lui mettre une soumission en javascript. Celle-ci est purement optionnelle (le fait que JS ne soit pas présent/exécuté n'annulera pas la soumission dudit formulaire) c'est juste pour réaliser une soumission automatique du formulaire après un temps défini : 15 minutes. (sinon l'utilisateur a tout le temps qu'il veut ... - idée : se rapprocher des conditions d'examen)
J'ai bien réussi à mettre un compte à rebours en javascript, celui-ci marche et dans le script que j'ai trouvé, l'action effectuée est une redirection : document.location.href = "page.php"; et testé sur mon site, ça marche.
moi je voudrais changer ça par un submit de formulaire, j'ai testé ça :
//document.getElementById('form_qcm').submit();
//setTimeout(function(){form_qcm.submit();},0);
document.forms['form_qcm'].submit();mais soit on me dit que form_qcm n'a pas d'attribut (console JS de firefox) soit document.forms.form_qcm.submit is not a function ...
mon formulaire est comme suit :
<form id="form_qcm" name="form_qcm" method="post" action="qcm-correct.html">
<fieldset><legend>Question 1</legend>
<h5>blabla</h5>
<ul>
<li><input type="checkbox" id="q_16_p_1" name="q_16_p_1" value="1" /><label for="..."></label></li>
....
</form>si qqn a une idée, je suis preneur, merci !
FYI RTFM ASAP => Tux : La Légende <=
NewsletTux
TOP Hors ligne


personne n'a d'idée ? 
FYI RTFM ASAP => Tux : La Légende <=
NewsletTux
TOP Hors ligne



Je n'osait rien dire car mon niveau de JS est proche du zero.. Mais si je comprends bien, tu veux qu'après 15 minutes, le formulaire s'envoie automatiquement a moins que l'utilisateur ne click sur "Envoyé" auquel cas, le formulaire serait envoyé directement?
Dans ce cas, je laisserai ton formulaire comme précédement en y ajoutant un bouton qui appellerait la même procédure JS que celle utilisée a la fin de ton compte à rebours.
<input type="button" onclick="tafonctiondenvoi()" name="btnEnvoyer" value="Envoyer" />
Dernière modification par Tuxicoman (07/05/07 20:10:46)
TOP Hors ligne


en fait, pour préciser un peu ma demande (mais merci d'avoir répondu quand même
) une série de QCM estdonnée aux candidats lors d'un examen et ceux-ci ont 1 minute par QCM. Soit pour l'anatomie de rouen, 15 minutes (puisqu'il y a 15 QCM).
Actuellement, le formulaire peut s'envoyer au bout de 30 secondes tout comme au bout de 2h : rien ne limite le temps de remplissage du formulaire. Pour "corser" un peu la difficulté, je souhaite reproduire ce temps limité.
Il est hors de question de faire une validation 100% en javascript pour une raison d'accessibilité (avec mon souhait, au pire, on perd la limite de temps), le javascript est comme un plus pour donner une nouvelle difficulté.
Je n'osait rien dire car mon niveau de JS est proche du zero.. Mais si je comprends bien, tu veux qu'après 15 minutes, le formulaire s'envoie automatiquement a moins que l'utilisateur ne click sur "Envoyé" auquel cas, le formulaire serait envoyé directement?
jusque là, oui
Dans ce cas, je laisserai ton formulaire comme précédement en y ajoutant un bouton qui appellerait la même procédure JS que celle utilisée a la fin de ton compte à rebours.
<input type="button" onclick="tafonctiondenvoi()" name="btnEnvoyer" value="Envoyer" />
oui, mais la procédure est un compteur, c.à.d. en permanence exécuté... Puisque toutes les secondes ya un chiffre à changer 
L'ajout d'un bouton supplémentaire (en supposant que je masque l'autre pour éviter de poser des soucis d'ergonomie) devra valider le formulaire, mais il faudrait alors que toutes les checkboxes soient bloquées ... Pour qu'on ne puisse pas rajouter de réponse "in extremis".
Pourquoi ne pas réfléchir dans cet axe ... je vais voir, merci.
FYI RTFM ASAP => Tux : La Légende <=
NewsletTux
TOP Hors ligne



$ la base, je suis plutot PHP.. Donc tu pourrais tout a fait avoir ton
<input type="submit" name="btnValider" Value="Valider le QCM" />
et un bout de code PHP du style :
<?
if(isset($_POST['btnValider']))
{
//une procédure qui envoie le contenu de ton QCM
}
?>
Avec cette solution, je suis certain que le gars ne peut pas rajouter une réponse "in extremis" car les valeurs $_POST seront prisent au moment ou le bouton "Valider" sera relaché 
TOP Hors ligne


oui, mais $_POST est coté serveur, et le javascript coté client ... Il faut donc d'abord que l'utilisateur soumette son formulaire avant de pouvoir utiliser un isset($_POST)...
FYI RTFM ASAP => Tux : La Légende <=
NewsletTux
TOP Hors ligne


setTimeout("document.getElementById('form_qcm').submit();", 3000);- contacter un élément HTML par getElementById est ce qu'il y a de mieux actuellement (méthode DOM)
- setTimeout reçoit le code à exécuter comme une chaîne de caractère (tout comme eval)
- le point virgule à la fin est important (également comme eval)
- ici, 3000 pour 3 secondes, 900000 pour 15 minutes
- l'attribut name de ton formulaire ne sert à rien (en XHTML Strict, il est même faux)
- un alert avant le submit serait apprécié je pense ^^
TOP Hors ligne


Merci de ta réponse, j'utilise personnellement le document.getElementById mais tu l'as bien vu, cette ligne est mise en commentaire : j'ai testé plusieurs solutions et plusieurs écritures de chaque solution (pour ça que j'ai rajouté le "name" du form).
Mais quelle qu'ait été l'écriture de cette ligne, je n'ai pas réussi à soumettre le formulaire...
FYI RTFM ASAP => Tux : La Légende <=
NewsletTux
TOP Hors ligne


j'ai résolu indirectement mon souci ... A la fin du décompte, je change l'affichage du bouton "corriger" pour le mettre en évidence et je masque via javascript les questions. Les tricheurs pourront toujours enlever le javascript 
J'ai tenté le readonly dynamique comme expliqué sur le blog de Dew mais vu l'heure j'ai pas le courage d'aller trop loin ... ça me laissera le loisir d'améliorer mon bout de code 
FYI RTFM ASAP => Tux : La Légende <=
NewsletTux
TOP Hors ligne