Donnez vie à vos documents numériques !
 

Raz et remplissage automatique

abracadabraPDF Forums PDF – Général Raz et remplissage automatique

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

    Bonjour, j’ai bien avancé sur un formulaire qui me servira de base pour beaucoup d’autres.

    L’idée est qu’il fonctionne quelque soit le nombre de questions, le nombre de réponses pour chaque question et le type de réponse (champ texte ; liste déroulante ou case à cocher)

    Il fonctionne bien. Je viens d’ajouter un menu administrateur avec lequel je peux éditer les réponses exactes pour chaque question et d’autres fonctions :

    J’aimerais aussi à l’aide du bouton Raz remettre à 0 sans pour autant effacer les champs « R…. » et les champs « Question….. » j’ai mis en place un bouton Default en face de chaque question mais j’aurais préfèrerais que lors de la saisie, la valeur soit d’emblée celle par défaut (je vais potasser dessus mais je crois que je vais y arriver)

    L’autre problème auquel je suis confronté c’est que j’aimerais qu’en cliquant sur le bouton Corriger dans le menu admin, toutes les bonnes réponses s’affichent et toutes les mauvaises s’effacent pour chaque champ « Q….  » or ces champs sont de type différents (texte ; liste déroulante ; checkbox …) et je ne vois pas trop comment faire. (je peux éventuellement remplacer toutes les listes déroulantes par des Checkbox si c’est plus simple)

     

    Merci

Affichage de 25 réponses de 1 à 25 (sur un total de 40)
  • Auteur
    Réponses
  • #72311
    michel c.
    Participant

    Pour que la valeur par défaut soit celle saisie, j’ai pensé à mettre en script de calcul ce code :

    var a = event.target.name;
    this.getField(a).defaultValue = this.getField(a).value;

    Qu’en pensez vous ?

    #72312
    michel c.
    Participant

    Je rencontre un problème sur un bout de code :

    J’ai n questions (nombre variable d’un document à un autre)

    et pour chaque qustion j’ai nChamps réponses. → R.n….. (nombre de champs réponse variable d’une question à une autre)

    Je voudrais mettre en place un bouton qui me permettrait de masquer tous les champs réponses pour chaque question

    J’ai fait ceci en me servant des derniers éléments que je commence à comprendre grâce à vous mais ça ne fonctionne pas.

    for (var b=1 ; b<=3 ; b++) {this.getField("Menu."+b).display=display.hidden;}
    var nbChRep=0;
    var nbQestions=0;
    for (var i=0; i<this.numFields; i++) {
    if (this.getNthFieldName(i).indexOf("Question.")==0) nbQestions++;
    }
    console.println("Nombre de questions : "+nbQestions);
    for (var a=1; a<=nbQestions; a++) {for (var i=0; i<this.numFields; i++) {
    if (this.getNthFieldName(i).indexOf("R."+a+".")==0) nbChRep++;
    for (var b=1; b<=nbChRep; b++) {this.getField("R."+a+"."+b).display=display.hidden;}

    }

     

    }

     

    Merci

    #72313
    Merlin
    Maître des clés

    Pour que la valeur par défaut soit celle saisie, j’ai pensé à mettre en script de calcul ce code :

    var a = event.target.name;
    this.getField(a).defaultValue = this.getField(a).value;

    Qu’en pensez vous ?

     

    event.target.defaultValue = event.target.value;

    Typiquement à placer en script de validation.

    #72314
    Merlin
    Maître des clés

    Pour la suite il faudrait voir la pièce jointe…

    😉

    (Upload Errors: 03-ex.4_eleve-test.pdf: File exceeds allowed file size.)

    #72315
    michel c.
    Participant

    Pardon, voici la pièce jointe (c’est dans le script de document HideAdm)

    Je voudrais que celui-ci cache tous les champs qui commencent par « R. »

    LIEN

    Pour le script de validation à placer, je me demandais comment utiliser la console pour propulser le même script dans tous les champs qui commencent par « R. »

    Merci

    • Cette réponse a été modifiée le il y a 1 mois par michel c..
    #72317
    Merlin
    Maître des clés

    Comment envoyer/partager/poster une pièce jointe volumineuse :

    Envoyer/partager/poster une pièce jointe volumineuse

    😎

    #72318
    Merlin
    Maître des clés

    « Pour le script de validation à placer, je me demandais comment utiliser la console pour propulser le même script dans tous les champs qui commencent par « R. » »

    Ce serait une mauvaise idée car si jamais tu voulais un jour pouvoir modifier ou supprimer ce script ce serait un enfer.

    Place le script en fonction (dans les scripts de document) et appelle la fonction depuis les champs.

     

    Ce script détecte tous les champs texte dont le nom commence par un R en capitale et leur ajoute « MaFonction » en script de validation :

    for (var i = 0; i < this.numFields; i++) {
    var oFld = this.getField(this.getNthFieldName(i));
    if ((oFld.type == "text") && (/\bR.+/.test(oFld.name))) {
    oFld.setAction("Validate", "MaFonction();");
    }
    }

    #72319
    Merlin
    Maître des clés

    « Je voudrais que celui-ci cache tous les champs qui commencent par « R. » »

     

    for (var i = 0; i < this.numFields; i++) {
    var oFld = this.getField(this.getNthFieldName(i));
    if (/\bR.+/.test(oFld.name)) {
    oFld.display = display.hidden;
    }
    }

     

    #72320
    Merlin
    Maître des clés

    Attention quand même : cette requête GREP détecte le « R » en début de mot, mais pas forcément en début de nom.

    Donc si un nom de champ contient des espaces et un mot commençant par « R » il sera détecté même le mot n’est pas en début de nom.

    Par exemple le champ « Loulou Fifi Riri » sera détecté comme positif.

    #72321
    bebarth
    Maître des clés
    bonjour,

    Attention quand même : cette requête GREP détecte le « R » en début de mot, mais pas forcément en début de nom.

    C’est pourquoi il vaut mieux écrire :
    ...
    if (/^R./.test(oFld.name)) {
    ...

    ou
    ...
    if (oFld.name.indexOf("R.")==0) {
    ...

    @+
    😎

    • Cette réponse a été modifiée le il y a 1 mois par bebarth.
    #72323
    michel c.
    Participant

    Merci, entre temps j’ai trouvé une autre solution : une check box (Menu.5) qui lorsqu’elle est cochée affiche ou non les champs à éditer.

    Pour cela il faut que les champs concernés Aient ce script en action de format :

    var a = event.target.name;
    console.println(a);
    this.getField(a).defaultValue = this.getField(a).value;

    Pour que la valeur saisie devienne la valeur par défaut

    et ce script en action de calcul :

    console.println(event.target.name);
    console.println(this.getField("Menu.5").value);
    if (this.getField("Menu.5").value == 1) {this.getField(event.target.name).display = display.visible;}
    if (this.getField("Menu.5").value != 1) {this.getField(event.target.name).display = display.hidden;}

    Pour que ces champs puissent soient visibles ou cachés.

    Je ne sais pas si cette méthode est valable (je vais les placer en script de document comme vous me l’avez suggéré.

    J’ai fait cela que sur la 1ère page.

    Je n’arrive pas encore à faire fonctionner les scripts proposés. Je vais réessayer

     

    LIEN

    • Cette réponse a été modifiée le il y a 1 mois par michel c..
    #72325
    michel c.
    Participant

    J’avance doucement, il y a encore 2 ou trois petites choses que je n’arrive pas à faire :

    • Cacher ou masquer les checkBox (R7.1 à R7.5) avec le script EditReps
    • Définir la valeur par defaut des mêmes checkboxes avec le script Default
    • Remettre à 0 les liste déroulantes avec le bouton Raz (ça je crois savoir comment m’y prendre)
    • Remettre en position readonly true tous les champs de réponses après avoir cliqué sur le bouton Raz (là je crois savoir aussi)
    • Corriger automatiquement le document après clic sur le bouton Corriger (là pas sûr que je sache)

    Merci pour votre aide en tout cas

    LIEN

     

    #72326
    Merlin
    Maître des clés

    « Cacher ou masquer les checkBox (R7.1 à R7.5) avec le script EditReps »

     

    this.getField("R7").display = display.hidden;

    #72327
    Merlin
    Maître des clés

    « Définir la valeur par defaut des mêmes checkboxes avec le script Default »

     

    for (var i = 1 ; i<6 ; i++) {this.getField("R7." +i).defaultValue = this.getField("R7." +i).value;}

    #72328
    michel c.
    Participant

    Oui, mai je cherche un script qui fonctionne quelque soit le numéro de champ R…

    Dans ce document les checkbox sont les champs R7….. mais dans un autre document ce sera peut être les champs R2….. et R8…..

    L’idée serai d’avoir des scripts qui fonctionnent sans que je les modifie pour gagner du temps ensuite lorsque je crée d’autres documents.

    #72329
    Merlin
    Maître des clés

    « Cacher ou masquer les checkBox (R7.1 à R7.5) avec le script EditReps »
    « Oui, mai je cherche un script qui fonctionne quelque soit le numéro de champ R… »

    Dans ce cas, si on suppose par exemple que le nombre maximal est de 100 :

    for (var i = 1 ; i<101 ; i++) {
    if (this.getField("R" +i) != null) {this.getField("R" +i).display = display.hidden;}
    }

    #72330
    Merlin
    Maître des clés

    « Remettre à 0 les liste déroulantes avec le bouton Raz »

     

    for (var i = 0; i < this.numFields; i++) {
    var oFld = this.getField(this.getNthFieldName(i));
    if (oFld.type == "combobox") {oFld.value = oFld.defaultValue;}
    }

    #72334
    michel c.
    Participant

    Merlin wrote:
    « Cacher ou masquer les checkBox (R7.1 à R7.5) avec le script EditReps »« Oui, mai je cherche un script qui fonctionne quelque soit le numéro de champ R… » Dans ce cas, si on suppose par exemple que le nombre maximal est de 100 : for (var i = 1 ; i<101 ; i++) {if (this.getField("R" +i) != null) {this.getField("R" +i).display = display.hidden;}}

    Ça marche parfaitement ! Merci
    J’ai essayé de m’en inspirer pour définir par defaut les Checkbox cochées avec ceci Dans le script Default :

    for (var i = 1 ; i<101 ; i++) {this.getField("R" +i).defaultValue = this.getField("R" +i).value;}Mais j’ai une erreur : Doc:Open:7: TypeError: this.getField(...) is nullLorsque je coche ou décoche une checkbox R…

    Merlin wrote:
    « Remettre à 0 les liste déroulantes avec le bouton Raz » for (var i = 0; i < this.numFields; i++) {var oFld = this.getField(this.getNthFieldName(i));if (oFld.type == "combobox") {oFld.value = oFld.defaultValue;}}

    Pour celui-ci ça marche mais la console me renvoie une erreur :

    Field:Mouse Up:5: InvalidSetError: InvalidSetError: A property set is not valid or possible.
    Field.[52]:5:Field:Mouse Up


    Voici le dernier fichier avec les modifications de Merlin : LIEN

    • Cette réponse a été modifiée le il y a 1 mois par michel c..
    #72346
    Merlin
    Maître des clés

    « J’ai essayé de m’en inspirer pour définir par defaut les Checkbox cochées avec ceci Dans le script Default :

    for (var i = 1 ; i<101 ; i++) {this.getField(« R » +i).defaultValue = this.getField(« R » +i).value;}Mais j’ai une erreur : Doc:Open:7: TypeError: this.getField(…) is nullLorsque je coche ou décoche une checkbox R… »

     

    Oui pardon, pour le coup comme on s’adresse à un champ parent on ne peut pas utiliser « value = defaultValue », il faut utiliser « resetForm ». J’ai testé ça fonctionne :

    for (var i = 1 ; i<100 ; i++) {
    if (this.getField("R" +i) != null) {this.resetForm("R" +i);}
    }

    #72347
    Merlin
    Maître des clés

    « « Remettre à 0 les liste déroulantes avec le bouton Raz…

    Pour celui-ci ça marche mais la console me renvoie une erreur : »

     

    Je suppose que c’est le même problème que ci-dessus, j’ai testé ça fonctionne correctement avec « resetForm » :

    for (var i = 0; i < this.numFields; i++) {
    var oFld = this.getField(this.getNthFieldName(i));
    if (oFld.type == "combobox") {this.resetForm(oFld.name);}
    }

    #72350
    michel c.
    Participant

    Merci pour le temps que tu passes pour m’aider avec ce qui ressemble de plus en plus à une usine à gaz (mais je commence à être habitué).

    J’ai essayé ce que tu propose mais cela ne fonctionne pas mais peut être que je n’étais pas très clair pour expliquer ce que je veux faire.

    • Mon document comporte des Titres, sous titres, textes divers à la page 1. Ceux-ci seront toujours visibles et non modifiables par l’élève.(1)
    • Il y a les intitulés des questions (champs Question1 ; Question2 ….) et parfois des détails pour certaines questions (champs Question3.1 ; Question3.2 …) → Seule la question 1 sera toujours visible (mais non modifiable par l’élève)
    • Les champs Q1.2 ; Q1.2 Q2.1 … sont les champs que l’élève va utiliser pour répondre. Seuls les champs Q1… sont toujours visibles pour l’élève (2)
    • Lorsque l’élève répond, à une question, après avoir cliqué sur vérifier, les réponses fausses apparaissent en rouge et tous les champs réponses passent en readonly true. Il clique ensuite sur recommencer et les champs réponses se déverrouillent et s’affichent en blanc
    • Si toutes les réponses sont exactes, alors la question suivante s’affiche (par exemple après la question 2 ; les champs Question.3 ; Question3.1 à QUestion3.4 et les champs réponses Q3.1 à Q3.4)
    • Le menu administrateur permet l’édition des question des titres, des champs de réponses justes (R…) (1)
    • Les champs de « réponses juste » (R…)  mettent les valeurs saisies dans les champs  comme valeur par default (action de format → script Default) (3)
    • Le menu administrateur permet aussi la remise à 0 du formulaire en effaçant tous les champs réponses et en masquant toutes les questions sauf la 1ère (2)
    • Il permet aussi d’afficher le corrigé de tout le document (très utile car le document élève et le corrigé ne font qu’un) (4)

    Et pour corser le tout, ce document me servira de base pour en faire d’autres et doit fonctionner quelque soit le nombre de questions et le nombre de champs réponses par question et le type de champ réponse….

    En vert ce que j’ai déjà réussi à faire

    En Orange ce qui ne fonctionne pas tout à fait

    En rouge ce que je n’ai pas fait ou ce qui ne fonctionne pas du tout.

    (1) Pour y arriver il faudrait que je filtre les noms de champs avec le texte situé avant le point→ ainsi les champs nommés Titre seront toujours en lecture seule et les champs commençant par Q ou par R seront modifiables si la croix est cochée. J’ai fait plusieurs essais pour le script EditReps. Je l’ai effacé car j’avais un truc extrêmement compliqué et qui ne fonctionnait pas.

    (2) Je ne vois pas trop comment faire pour qu’en cliquant sur Raz seule la question 1 soit visible

    (3) ça ne fonctionne pas pour les checkbox

    (4) Je ne me suis pas encore penché dessus

     

    Merci encore pour toute votre aide.

    LIEN vers l’usine à gaz

    • Cette réponse a été modifiée le il y a 4 semaines par michel c..
    #72353
    Merlin
    Maître des clés

     » (2) Je ne vois pas trop comment faire pour qu’en cliquant sur Raz seule la question 1 soit visible »

    Ça c’est le plus facile, il faut masquer tous les champs Question, par exemple en se basant sur leurs noms, et ensuite ré-afficher la question 1.

    Exemple :

    for (var i = 1 ; i<101 ; i++) {
    if (this.getField("Q" +i) != null) {this.getField("Q" +i).display = display.hidden;}
    }

    this.getField("Q1").display = display.visible;

     

    Pour le reste je répondrai plus tard.

    La dernière version de ton document est inutilisable avec Acrobat, au début on voit des éléments s’afficher séquentiellement et ensuite il n’en fini plus de mouliner jusqu’à ce que je le force à quitter/Fin de tâche.

     

    J’ai un faible pour les usines à gaz et les problématiques inhabituelles, et j’ai aussi un faible pour les gens qui se décarcassent pour créer un outil à leur main plutôt que d’attendre en pleurnichant que ça tombe du ciel.

     

    #72354
    michel c.
    Participant

    Merci, j’ai mis ce script en modifiant 2 ou trois petites choses dans la fonction Raz.

    ça fonctionne à 2 détails près : après avoir cliqué sur Raz, le champ R1.2 affiche la valeur 5 (alors que celle-ci ne figure pas dans la liste déroulante), certains champs s’affichent toujours et certaines listes ne sont pas effacées de leurs valeurs.

    Je vais me pencher dessus.

    LIEN

    #72357
    michel c.
    Participant

    J’ai une petite idée pour résoudre pas mal de petits trucs mais il me manque un bout de code.

    Je sais que le code event.target.name.substr(4)) affiche le nom du champ cible après avoir retiré les 4 1ers caractères mais je me demandais si l’on pouvait extraire des caractères situés au milieu du nom du champ.

    Par exemple si je veux extraire le chiffre compris entre les 2 points d’un champ qui se nommerait R.5.3 (ici le chiffre 5) mais il faudrait que ça fonctionne pour le cas d’un nombre à 2 chiffres comme R.12.10 (pour extraire le nombre 12)

     

    Pour solutionner les valeurs par défaut que je souhaite définir sur les checkbox dès qu’elles sont cochées ou décochées, j’ai testé ceci :

    function Default() {

    var a = event.target.name;

    if (this.getField(a).type == "checkbox") {
    if (this.getField(a).value == "yes") {this.getField(a).defaultValue = "yes";}
    if (this.getField(a).value == "no") {this.getField(a).defaultValue = "no";}
    }

    if (this.getField(a).type != "checkbox") {this.getField(a).defaultValue = this.getField(a).value;}

    for (var i = 0; i < this.numFields; i++) {
    var oFld = this.getField(this.getNthFieldName(i));
    if (oFld.type == "combobox") {this.resetForm(oFld.name);}

    }
    }

    Je n’ai pas de message d’erreur mais ça ne marche pas…

     

    Merci

    • Cette réponse a été modifiée le il y a 4 semaines par michel c..
    • Cette réponse a été modifiée le il y a 4 semaines par michel c..
    #72365
    bebarth
    Maître des clés
    bonjour,

    Par exemple si je veux extraire le chiffre compris entre les 2 points d’un champ qui se nommerait R.5.3 (ici le chiffre 5) mais il faudrait que ça fonctionne pour le cas d’un nombre à 2 chiffres comme R.12.10 (pour extraire le nombre 12)

    Pour celà, il faut prendre la valeur indiquée entre le premier et le dernier point. Essaye ceci :
    var nomChamp="R.12.10";
    var premierPoint=nomChamp.indexOf(".");
    var dernierPoint=nomChamp.lastIndexOf(".");
    var indice=nomChamp.substring(premierPoint+1,dernierPoint);
    console.println("indice : "+indice);
    Ce serait un peu plus compliqué s’il y avait plus de 2 points mais c’est faisable quand même !

    @+
    😎

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