Donnez vie à vos documents numériques !
 

Léger bug sur mon formulaire

abracadabraPDF Forums PDF – Général Léger bug sur mon formulaire

  • Ce sujet contient 6 réponses, 3 participants et a été mis à jour pour la dernière fois par Merlin, le il y a 1 mois.
  • Créateur
    Sujet
  • #74822
    michel c.
    Participant

    Bonjour, j’ai un léger dysfonctionnement sur un script mais je ne sais pas quoi faire pour corriger (BB m’avait aidé sur ce script et je reconnais que je ne maitrise pas du tout cette partie du script)

    Sur ce formulaire, à la partie 2, l’élève doit saisir une réponse dans chaque champ (Q.2.1 à Q.2.4) et chaque réponse est comparée aux champ R.1.1 à R.1.4

    La particularité c’est que pour accepter plusieurs réponses (j’avais demandé de l’aide pour cela), il suffit que l’enseignant sépare chaque réponse “acceptable” du séparateur : “|”

    Cependant pour le champ Q.2.2, les 2 seules réponses acceptées devraient être madrid et Madrid. Or en écrivant Madride je m’aperçois que cette réponse est acceptée. (alors que dans le champ R.2.2 est inscrit Madrid|madrid)

    Le script de vérification est le script de document verifier (ci dessous) et je pense que le problème se situe entre les lignes 22 et 24

    function verifier(n) {

    var nCompt = 0;
    for (var i = 0 ; i < this.numFields ; i++) {
    var oChamp = this.getField(this.getNthFieldName(i));
    if ((oChamp.type == "button") && (/Verifier./.test(oChamp.name))) {nCompt = nCompt + 1;}
    }

    var DerVer = nCompt;
    //app.alert("Il y a " + DerVer + " boutons Vérifier dans ce document ; n = "+n);

    var colorErr = this.getField("Menu.11").value;
    var colorOk = this.getField("Menu.13").value;
    var nbChamps=0;
    for (var i=0; i<this.numFields; i++) {if (this.getNthFieldName(i).indexOf("Q."+n+".")==0) nbChamps++;}

    var erreurs=0;
    for (var a=1; a<=nbChamps; a++) {
    this.getField("Q."+n+"."+a).readonly=true;

    var RegExTest=new RegExp("^"+this.getField("R."+n+"."+a).valueAsString.replace(/[.*+?^${}()/\[\]\\]/g,"\\$&")+"$");

    if (RegExTest.test(this.getField("Q."+n+"."+a).value)) {this.getField("Q."+n+"."+a).fillColor=eval("color."+colorOk);}

    else {this.getField("Q."+n+"."+a).fillColor=eval("color."+colorErr);erreurs++;this.getField("Erreurs").value++;}
    }

    if (!erreurs) {
    app.alert({cMsg:"C'est exact !", nIcon:2});
    var p = parseFloat(n)+1;
    //console.println(n);

    if (this.getField("Verifier."+p+".0") != null) {this.getField("Verifier."+p+".0").display=display.visible;
    this.getField("Verifier."+p+".0").display=display.noPrint;}
    if (this.getField("Recommencer."+p+".0") != null) {this.getField("Recommencer."+p+".0").display=display.visible;
    this.getField("Recommencer."+p+".0").display=display.noPrint;}
    if (this.getField("TQ."+p+".0") != null) {this.getField("TQ."+p+".0").display=display.visible;}
    if (this.getField("TL."+p) != null) {this.getField("TL."+p).display=display.visible;}
    if (this.getField("Aide."+p+".0") != null) {this.getField("Aide."+p+".0").display=display.visible;
    this.getField("Aide."+p+".0").display=display.noPrint;}

    var nbChQuestion=0;
    for (var i=0; i<this.numFields; i++) {
    if (this.getNthFieldName(i).indexOf("Question."+p)==0) nbChQuestion++;
    }
    for (var a=1; a<=nbChQuestion; a++) {
    if (this.getField("Question."+p+"."+a) != null) {this.getField("Question."+p+"."+a).display=display.visible;}
    }

    var nbChRep=0;
    for (var i=0; i<this.numFields; i++) {
    if (this.getNthFieldName(i).indexOf("Q."+p+".")==0) nbChRep++;
    }
    for (var a=1; a<=nbChRep; a++) {
    if (this.getField("Q."+p+"."+a) != null) {this.getField("Q."+p+"."+a).display=display.visible;
    this.getField("Q."+p+"."+a).readonly=false;
    }
    }
    if (n == DerVer) {
    var errMax = this.getField("Menu.7").value;
    var ErrCom = this.getField("Erreurs").value;

    if (errMax<=ErrCom) {app.alert({cMsg:"Vous avez fait " + ErrCom + " erreur(s). Il fallait faire moins de " + errMax + " erreur(s)." +"\r"+ " Recommencez le questionnaire", nIcon:2});Raz();} if (errMax>ErrCom) {app.alert({cMsg:"Bravo, vous avez réussi en faisant moins de " + errMax + " erreur(s).", nIcon:2});}

    }

     

     

    }

    var nbChValider=0;
    for (var i=0; i<this.numFields; i++) { if (this.getNthFieldName(i).indexOf("Verifier.")==0) nbChValider++; } if (erreurs==1) {app.alert({cMsg:"Il y a une erreur." +"\r"+ "Cliquez sur Recommencer pour refaire la question.", nIcon:2}); this.getField("Verifier.1").readonly=false; this.getField("Recommencer.1").readonly=false; } if (erreurs>1) {app.alert({cMsg:"Il y a "+erreurs+" erreurs." +"\r"+ "Cliquez sur Recommencer pour refaire la question.", nIcon:2});
    this.getField("Verifier.1").readonly=false;
    this.getField("Recommencer.1").readonly=false;
    }

    }

     

     

    • Ce sujet a été modifié le il y a 1 mois et 1 semaine par michel c..
    Attachments:
    You must be logged in to view attached files.
Affichage de 6 réponses de 1 à 6 (sur un total de 6)
  • Auteur
    Réponses
  • #74825
    bebarth
    Maître des clés

    bonjour,
    Il faut vérifier toutes les réponses possibles séparées par “|” :
    ...
    this.getField("Q."+n+"."+a).readonly=true;
    // BB
    var rep=this.getField("R."+n+"."+a).valueAsString.split("|");
    var OK=0;
    for (var k=0; k<rep.length; k++) {
    var RegExTest=new RegExp("^"+rep[k]+"$");
    if (RegExTest.test(this.getField("Q."+n+"."+a).value)) OK++;
    }
    if (OK) {this.getField("Q."+n+"."+a).fillColor=eval("color."+colorOk);}
    else {this.getField("Q."+n+"."+a).fillColor=eval("color."+colorErr);erreurs++;this.getField("Erreurs").value++;}
    // BB
    if (!erreurs) {
    ...

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    #74827
    michel c.
    Participant

    Merci infiniment.

    Par contre ça a entraîné un autre souci :pour la 3ème partie, celle ci devrait être validée si la 2ème case est cochée et toutes les autres décochées.

    Or ça ne fonctionne pas du 1er coup….

    Attachments:
    You must be logged in to view attached files.
    #74829
    bebarth
    Maître des clés

    Après avoir cherché un certain temps, je me suis aperçu que :
    Lorsque l’on crée une case à cocher sur Acrobat, sa valeur par défaut est “Off” (décochée).
    Apparemment, avec ton logiciel, sa valeur par défaut lors de sa création est “undefined” (décochée), et lorsqu’on la coche puis décoche sa valeur est “Off”.

    Pour que ça fonctionne sans modifier le script, il faut donc cocher/décocher toutes les cases à cocher avant de les utiliser (idem pour les boutons radio je suppose), ou lancer ce script :
    for (var i=0; i<this.numFields; i++) {
    var nomChamp=this.getNthFieldName(i);
    if ((this.getField(nomChamp).type=="checkbox" || this.getField(nomChamp).type=="radiobutton") && this.getField(nomChamp).value=="undefined") this.getField(nomChamp).value="Off";
    }

    Pour info, ça ne fonctionnait pas non plus dans le premier fichier que tu as partagé…

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    #74831
    michel c.
    Participant

    Merci pour la réponse, je viens d’identifier le problème car le bug survenait à nouveau lors de l’execution du script Raz.

    Plus particulièrement les lignes 30 à 32 :

    if (this.getField(nomChamp).type=="text") {this.getField(nomChamp).value="";}
    else {this.getField(nomChamp).value=this.getField(nomChamp).getItemAt(0,false);}
    }

    Que j’ai modifiées comme ceci grâce à ton code :

    if (this.getField(nomChamp).type=="text") {this.getField(nomChamp).value="";}
    if ((this.getField(nomChamp).type=="checkbox" || this.getField(nomChamp).type=="radiobutton")) this.getField(nomChamp).value="Off";
    else {this.getField(nomChamp).value=this.getField(nomChamp).getItemAt(0,false);}
    }

    Comme il s’agit d’un champ Q.a.b : en appuyant sur raz je souhaite que les cases soient décochées.

    Par contre maintenant c’est les champs textes qui prennent la valeur undefined lors de l’exécution du script Raz….

    Bon, je vais me coucher, la nuit porte conseil…

    • Cette réponse a été modifiée le il y a 1 mois et 1 semaine par michel c..
    • Cette réponse a été modifiée le il y a 1 mois et 1 semaine par michel c..
    Attachments:
    You must be logged in to view attached files.
    #74835
    michel c.
    Participant

    J’ai trouvé avant de dormir…

    J’ai modifié la dernière ligne de cette partie du script Raz :

    if (this.getField(nomChamp).type=="text") {this.getField(nomChamp).value="";}
    if ((this.getField(nomChamp).type=="checkbox" || this.getField(nomChamp).type=="radiobutton") && this.getField(nomChamp).value=="undefined") this.getField(nomChamp).value="Off";
    else {this.getField(nomChamp).value=this.getField(nomChamp).getItemAt(0,false);}

    comme ceci

    if (this.getField(nomChamp).type=="text") {this.getField(nomChamp).value="";}
    if ((this.getField(nomChamp).type=="checkbox" || this.getField(nomChamp).type=="radiobutton") && this.getField(nomChamp).value=="undefined") this.getField(nomChamp).value="Off";
    if (this.getField(nomChamp).type=="dropdown") {this.getField(nomChamp).value=this.getField(nomChamp).getItemAt(0,false);}

    #74836
    Merlin
    Maître des clés

    Moi en général c’est après avoir dormi que je comprend mes erreurs/bugs !

    😉

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