Donnez vie à vos documents numériques !
 

Vérification liste déroulante

abracadabraPDF Forums PDF – Général Vérification liste déroulante

  • Ce sujet est vide.
  • Créateur
    Sujet
  • #46310
    fredo62
    Membre

    Bonjour, je suis novice en JavaScript.

    J’essaie de concevoir des cours pour mes élèves sous forme de qcm.

    J’ai intégré un bouton de “vérification” pour leur signaler le % de bonne réponse qu’ils obtiennent pour chaque réponse, ainsi qu’une moyenne en fin de formulaire

    Mais je rencontre un problème, j’aimerai que lors du clic sur vérification, si l’élève à faux, la valeur affichée soit 0%

    J’utilise différents types de champs, case à cocher, liste déroulante et champ de texte.

    J’arrive à afficher en cas de mauvaise réponse, 0% sur les questions utilisant des cases à cocher, j’utilise cette ligne : if (this.getField(“note2”).value = 0)
    {this.getField(“note2”) = “0”;}

    Par contre je n’arrive pas à le faire pour les listes déroulantes ou encore les champ texte. Actuellement je n’ai aucune valeur pour ces deux types de champs.

    Autre petit problème, j’aimerai protéger mes documents pour éviter qu’un collègue voir même un élève ne puissent modifier mes champs et mes java script.
    Lorsque je protège mon document, le formulaire ne fonctionne plus. Je ne dois pas mettre la bonne protection !!!

    Auriez-vous une solution à mes problèmes ?

    Merci d’avance pour vos retours, bonne journée
    Fred

Affichage de 7 réponses de 1 à 7 (sur un total de 7)
  • Auteur
    Réponses
  • #67507
    Merlin
    Maître des clés

    Bonjour et bienvenue

    J’arrive à afficher en cas de mauvaise réponse, 0% sur les questions utilisant des cases à cocher, j’utilise cette ligne : if (this.getField(“note2”).value = 0)
    {this.getField(“note2”) = “0”;}

    C’est ce qu’on appelle un “faux positif”, en réalité ce script ne fait rien d’autre que remplacer un zéro par un zéro.
    La vérité est ailleurs…  :Smiley03:

    Pour le reste c’est difficile à comprendre, il faudrait que tu partages ton document, ou une maquette.

    #67508
    fredo62
    Membre

    Bonjour et merci pour ton retour.
    J’ai réussi en modifiant la ligne par celle ci;
    if (this.getField(“note1”).value == 0)
    {this.getField(“note1”).value = “0”;}
    Différence légère, == mais la ça fonctionne.
    Il ne me reste plus qu’a protéger mon document pour éviter qu’il soit modifié, mais que le formulaire soit toujours possible à compléter.
    Auriez vous des idées ?

    #67509
    Merlin
    Maître des clés

    La différence est effectivement très subtile.  :geek:

    Traduction :

    if (this.getField(“note1”).value == 0) = Si la valeur du champ “note1” est égale à zéro

    {this.getField(“note1”).value = “0”;} = Alors remplace la valeur du champ “note1” par zéro
    Et sinon il ne se passe rien.

    C’est ce qui me fait dire que ce script est inutile, quel que soit le nom du champ auquel il s’adresse.
    Il faudrait vraiment que tu partages ton document ou un exemple.

    Concernant la protection du document, ce n’est pas possible sauf à prendre un abonnement auprès d’un fournisseur de DRM (Digital Rights Management) dont le coût annuel équivaut à peu près au salaire annuel d’un professeur agrégé français…

    Les protections proposées par Adobe ne valent malheureusement rien, je suppose que tous les élèves le savent.
    Voir (entre autres) : https://smallpdf.com/fr/unlock-pdf

    #67510
    fredo62
    Membre

    bonjour, voici un exemple. (Il n’y a que 2 questions car fichier très volumineux avec vidéo etc)

    Là ça fonctionne mais tu auras surement d’autres manières de faire qui peuvent me convenir.
    Je prend tous conseils qui m’aideraient à faire ce genre de document rapidement  :Smiley01:
    Merci d’avance, bonne journée

    #67511
    Merlin
    Maître des clés

    Ce que je ne comprend pas c’est que le champ “note0” semble servir à la fois pour afficher le % de progression et à la fois pour afficher le résultat du test…
    :Euuuh:  :doute:

    Quoi qu’il en soit, ce script :

    Code:
    this.resetForm([“note0”]);

    var f1 = this.getField(“Group0”);
    if (f1.isBoxChecked(0))
    {this.getField(“note0”).value = this.getField(“note0”).value + 33.33;}

    var f2 = this.getField(“Group1”);
    if (f2.isBoxChecked(0))
    {this.getField(“note0”).value = this.getField(“note0”).value + 33.33;}

    var f3 = this.getField(“Group2”);
    if (f3.isBoxChecked(0))
    {this.getField(“note0”).value = this.getField(“note0”).value + 33.33;}

    if (this.getField(“note0”).value == 0)
    {this.getField(“note0”).value = “0”;}

    this.getField(“note0”).value = (this.getField(“note0”).value).toFixed(0);

    Serait avantageusement remplacé par celui-ci :

    Code:
    var nTotal = 0;
    for (i=0, i++, i<3) {
    if (this.getField(“Group” + i).isBoxChecked(0)) {
    nTotal = nTotal + 33.33;
    }
    }
    this.getField(“note0”).value = nTotal;

    Qu’on peut également écrire ainsi :

    Code:
    var nTotal = 0;
    for (i=0, i++, i<3) {
    if (this.getField(“Group” + i).value == “Choix1”) {
    nTotal = nTotal + 33.33;
    }
    }
    this.getField(“note0”).value = nTotal;

    Ainsi au lieu de répéter l’instruction autant de fois qu’il y a de boutons-radio il suffit de modifier la valeur de “i3
    :Smiley15:

    Et si je peux me permettre : “Mr” c’est l’abréviation anglaise de “mister”.
    En français “monsieur” s’abrège “M.”

    :Smiley03:

    #67512
    fredo62
    Membre

    Merci Merlin pour ton retour rapide, ainsi que ta remarque sur Mr  :Smiley03:
    Le champ “note0” permet à l’élève d’avoir le nombre de bonne réponse pour chaque question, il peut sur ce fichier modifier ses réponses pour obtenir toute les bonnes réponses. Le but n’est pas de l’évaluer mais de lui faire découvrir le fonctionnement d’un élément.
    Je nomme ce champ ‘note’, mais c’est juste pour m’y retrouver.

    Je refais ce même fichier mais cette fois ci en bloquant les réponses lorsqu’il clic sur vérification, et la je peux l’évaluer.
    Je viens d’essayer ton scripts mais étant novice je n’ai pas compris comment modifier la variable i . Ce sont les ‘group’ que je dois mettre sur cette valeur ? Sur certains fichiers, je peux avoir 30 pages donc énormément de case à cocher.

    J’utilise principalement 3 types de champ, la case à cocher, le champ texte et le menu déroulant.Ton script fonctionne pour ces 3 types de champ?
    J’aurai encore des choses à te montrer car je passe beaucoup de temps et je suis sur qu’il y a des méthodes plus rapide comme tu viens de me montrer, mais mes fichiers sont lourd avec images,vidéo etc… mais je ne peux pas t’envoyer ta totalité du fichier sur le site.

    Encore merci pour ton aide, bonne journée

    #67513
    Merlin
    Maître des clés

    Ce n’est pas le nom du champ “note0” qui me chiffonnait, c’est que j’avais crû comprendre qu’il servait à deux choses à la fois.

    Le script fonctionne sur les champs dont le nom est “Group” suivi d’un chiffre (i) entre 0 (i=0) et 2 (i3).
    Quand on n’a que trois séries de boutons-radio ce n’est pas très pénalisant de répéter l’instruction trois fois, mais s’il y en avait 25, 50 ou plus ce ne serait pas le même plaisir. D’où l’intérêt d’utiliser une boucle for
    Ainsi si tu avais 100 groupes de boutons-radios numérotés de 0 à 99, il suffirait de remplacer “3” par “100”. (Et de remplacer “Group” par leur vrai nom si ce n’était pas le même)

    Pour utiliser ce script avec des champs texte, des listes ou des menus il faut utiliser la deuxième version, avec  xxx.value == XX
    car la propriété isBoxChecked n’existe que pour les boutons-radio et les cases à cocher.

    Pour partager un document PDF, quelque soit son poids : Acrobat : menu Fichier : Partager : Obtenir le lien.
    Ou sinon voir : http://abracadabrapdf.net/forum/index.php/topic,2974.msg16849.html#msg16849
    :Smiley03:

Affichage de 7 réponses de 1 à 7 (sur un total de 7)
  • Vous devez être connecté pour répondre à ce sujet.