Donnez vie à vos documents numériques !
 

Raz et remplissage automatique

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

  • 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 40 réponses de 1 à 40 (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 année et 3 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 année et 3 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 année et 3 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 année et 3 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 1 année et 3 mois 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 1 année et 3 mois par michel c..
    • Cette réponse a été modifiée le il y a 1 année et 3 mois 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 !

    @+
    😎

    #72368
    bebarth
    Maître des clés

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

    Je n’ai pas vérifié le script entier, mais la première chose que je vois est que resetForm() doit s’appliquer à une table, il faut donc écrire :
    if (oFld.type == "combobox") {this.resetForm([oFld.name]);}

    Je regarderai plus précisément si ça ne fonctionne pas mieux…

    @+
    😎

    #72370
    michel c.
    Participant

    Merci pour tes 2 suggestions. La 1ère (utilisation d’un indice compris entre les 2 points du nom du champ) me permettra je pense d’y arriver (j’ai encore des erreurs mais je pense qu’elles sont dues à des champs qui portent des noms incorrects)

    Pour la 2ème suggestion, je l’ai implémentée au script Raz mais j’ai toujours quelques listes déroulantes qui ne s’initialisent pas (Q.8.1 ; Q.9.1 par exemple)

    Sinon, j’ai viré les checkboxe et je les ai remplacées par des menus déroulants (vrai ou faux) ; j’étais en train de devenir maboul alors j’ai contourné le problème.

    LIEN

    Merci encore

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

    J’ai renommé les champs pour qu’ils aient tous 2 points et j’ai utilisé les indices pour extraire l’indice1 (nombre situé entre les 2 points) et l’indice2 (nombre situé après le dernier point)

    J’ai modifié mon script EditReps qui est beaucoup plus simple.

    Je comptais faire pareil pour le script Raz.

    Mais, je ne comprend pas pourquoi ça ne fonctionne pas….

     

    LIEN

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

    Le dernier fichier (j’ai essayé de faire un peu le ménage dans les scripts mais j’ai toujours des erreurs).

    LIEN

    #72379
    michel c.
    Participant

    J’ai compris mes erreurs (elles étaient multiples).

    Pour le coup j’ai résolu 2 problèmes : le script Default et EditReps

    Je potasse un peu le script Raz qui fonctionne encore mal.

    Je vais essayer tout seul comme un grand.

    LIEN

    #72380
    michel c.
    Participant

    J’ai réussi à mettre en place une fonction Remise à 0 qui fonctionne.

    Je suis en train de vérifier les bugs éventuels et ajouter quelques petites fonctionalités mais c’est en bonne voie.

    Merci à tous

    #72405
    michel c.
    Participant

    Bonjour, j’ai un peu tout passé en revue, j’en ai profité pour ajouter des aides interactives mais j’ai un bug que je n’arrive pas à corriger.

    Lorsque je clique sur Raz, l’aide de la question 1 (Aide.1.1) s’affiche alors que je voudrais qu’elle soit masquée.

    C’est peut être le dernier bug. En tout cas, celui-ci est gênant.

    Si quelqu’un pouvait m’aider, ça fait un moment que je suis dessus sans avoir la moindre piste.

    Merci

    LIEN

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

    Je crois que ça vient de la fonction “EditReps()” qui est utilisée en script de calcul par le champ “Aide.1.1” parce-que la valeur du champ “Menu5” (qui est une case à cocher…) n’est pas égale à “1”, voir capture.

    Quand on fait un reset (resetForms ou defaulValue) ça déclenche les actions de calcul de tous les champs, actions qui s’effectuent donc après le reset.

    En clair le champ “Aide.1.1” s’auto-réaffiche après chaque reset.

    Voir : https://www.abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/lordre-dexecution-des-evenements-dans-les-champs-de-formulaire-pdf/

     

     

    Note que dans cette fonction tu pourrais avantageusement remplacer la ligne (encadrée) :

    if (this.getField("Menu.5").value != 1) {

    par

    else {

     

    😉

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

    Autre chose, j’ai lu ton code de reset qui mouline beaucoup et inutilement :

    • il faut oublier le “f” !
    • “100” c’était un exemple, dans un premier temps tu pourrais utiliser un chiffre plus modeste.

     

    S’agissant d’une propriété partagée (display, color, etc) quand on s’adresse à un champ parent on s’adresse à tous ses enfants.

    Par exemple :

    this.getField("Q.1).display = display.hidden;

    suffit à masquer tous les champs dont le nom commence par “Q.1.”

     

    Donc la première partie de la fonction Raz() :

    function Raz() {
    this.getField("Erreurs").value = 0;
    this.getField("Menu.5").value = 0;

    for (var i = 1 ; i<101 ; i++) {
    for (var f = 0 ; f<101 ; f++) {
    if (this.getField("Q."+i +"."+f) != null) {this.getField("Q."+i +"."+f).display = display.hidden;
    this.getField("Q."+i +"."+f).fillColor=color.white;
    }
    if (this.getField("TQ."+i +"."+f) != null) {this.getField("TQ."+i +"."+f).display = display.hidden;}
    if (this.getField("Question."+i +"."+f) != null) {this.getField("Question."+i +"."+f).display = display.hidden;}
    if (this.getField("Verifier."+i +"."+f) != null) {this.getField("Verifier."+i +"."+f).display = display.hidden;}
    if (this.getField("Recommencer."+i +"."+f) != null) {this.getField("Recommencer."+i +"."+f).display = display.hidden;}
    if (this.getField("Aide."+i +"."+f) != null) {this.getField("Aide."+i +"."+f).display = display.hidden;}
    }
    }

    ...

     

    Pourrait être simplifiée ainsi (sans les 100 x 100 boucles “f”) :

    function Raz() {
    this.getField("Erreurs").value = 0;
    this.getField("Menu.5").value = 0;

    for (var i = 1 ; i<101 ; i++) {
    if (this.getField("Q."+i) != null) {
    this.getField("Q."+i).display = display.hidden;
    this.getField("Q."+i).fillColor=color.white;
    }
    if (this.getField("TQ."+i) != null) {this.getField("TQ."+i).display = display.hidden;}
    if (this.getField("Question."+i) != null) {this.getField("Question."+i).display = display.hidden;}
    if (this.getField("Verifier."+i) != null) {this.getField("Verifier."+i).display = display.hidden;}
    if (this.getField("Recommencer."+i) != null) {this.getField("Recommencer."+i).display = display.hidden;}
    if (this.getField("Aide."+i) != null) {this.getField("Aide."+i).display = display.hidden;}
    }

    #72413
    Merlin
    Maître des clés

    Cependant pour le reset je me baserais seulement sur les noms de champs, ce script devrait aller encore plus vite car il ne cherche pas de champs inexistants :

    function Raz() {

    for (var i = 0; i < this.numFields; i++) {
    var oFld = this.getField(this.getNthFieldName(i));

    if (/\bQ.+/.test(oFld.name)) {
    oFld.display = display.hidden;
    oFld.fillColor = color.white;
    oFld.value = oFld.defaultValue;
    }

    else if (/\bQ\.1.+/.test(oFld.name)) {
    oFld.display = display.visible;
    oFld.readonly = false;
    }

    else if (/\bTQ.+/.test(oFld.name) || /\bQuestion.+/.test(oFld.name) || /\bVerifier.+/.test(oFld.name) || /\bRecommencer.+/.test(oFld.name) || /\bAide.+/.test(oFld.name)) {
    oFld.display = display.hidden;
    oFld.readonly = false;
    }

    }

    this.getField("Verifier.1.0").display = display.visible
    this.getField("Verifier.1.0").display = display.noPrint;
    this.getField("Recommencer.1.0").display = display.visible;
    this.getField("Recommencer.1.0").display = display.noPrint;
    this.getField("TQ.1.0").display = display.visible;
    this.getField("Aide.1.0").display = display.visible;
    this.getField("Erreurs").value = 0;
    this.getField("Menu.5").value = 0; // !!!

    }

    #72418
    michel c.
    Participant

    Merci, j’ai appliqué les changements que tu préconisais dans tes messages de 12h30 et 13h02.

    Pour les autres, j’ai essayé mais il y avait des erreurs et comme j’ai de fortes lacunes dans ce que tu proposes, je n’ai pas pu corriger.

    Pour les 100 x 100 boucles « f » ; je les ai supprimées comme tu le disais dans la fonction raz, sauf pour la dernière partie ou j’ai du en conserver une avec un nombre plus modeste :

    for (var i = 1 ; i<50 ; i++) {
    for (var f = 0 ; f<50 ; f++) {
    if (this.getField("Q."+i +"."+f) != null && this.getField("Q."+i +"."+f).type != "combobox") {this.getField("Q."+i +"."+f).value = "";}
    if (this.getField("Q."+i +"."+f) != null && this.getField("Q."+i +"."+f).type == "combobox") {this.resetForm([("Q."+i +"."+f)]);}

    }
    }

    Sans cela, lors du clic sur raz, je n’avais pas d’erreur à la console mais les menus déroulants ne s’initialisaient pas (peut être une erreur dans mon code) ; j’avais écrit ceci :

    if (this.getField("Q.") != null && this.getField("Q.").type != "combobox") {this.getField("Q.").value = "";}
    if (this.getField("Q.") != null && this.getField("Q.").type == "combobox") {this.resetForm(("Q."));}

    Je suis en train de tout revérifier pour voir si je n’ai pas d’erreur ou de bug que je n’avais pas vu….

    Merci encore

    LIEN

    #72419
    michel c.
    Participant

    Autre question, est il possible de faire “remonter” plus d’une variable lors d’un clic sur un bouton pour appeler une fonction qui utilisera ces variables.

    Par exemple le script affecté à un bouton :

    var nomChamp=event.target.name;
    var premierPoint=nomChamp.indexOf(".");
    var dernierPoint=nomChamp.lastIndexOf(".");
    var ind1=nomChamp.substring(premierPoint+1,dernierPoint);
    var ind2=nomChamp.substring(dernierPoint+1);
    var prefixe = nomChamp.substring(0, premierPoint);

    NomDeLaFonction(nomChamp,ind1,ind2);

    Et en script de document :

    NomDeLaFonction(nomChamp,ind1,ind2) {

    Code utilisant les variables nomChamp, ind1 et ind2

    }

    Merci

    #72422
    Merlin
    Maître des clés

    Pour les autres, j’ai essayé mais il y avait des erreurs et comme j’ai de fortes lacunes dans ce que tu proposes, je n’ai pas pu corriger.

    1000 excuses, une parenthèse a disparu entre le test et la copie dans le sujet. C’est corrigé (ci-dessus, c’est la parenthèse en bleu).

    Mais là c’est plus une question d’outil que de niveau, la console JS d’Acrobat m’a tout de suite signalé la parenthèse manquante. 😉

    #72423
    Merlin
    Maître des clés

    Autre question, est il possible de faire « remonter » plus d’une variable lors d’un clic sur un bouton pour appeler une fonction qui utilisera ces variables.

    Oui.

    #72424
    Merlin
    Maître des clés

    for (var i = 1 ; i<50 ; i++) {
    for (var f = 0 ; f<50 ; f++) {
    if
    (this.getField("Q."+i +"."+f) != null && this.getField("Q."+i
    +"."+f).type != "combobox") {this.getField("Q."+i +"."+f).value = "";}
    if
    (this.getField("Q."+i +"."+f) != null && this.getField("Q."+i
    +"."+f).type == "combobox") {this.resetForm([("Q."+i +"."+f)]);}

     

    Je ne comprend pas ce script inutilement compliqué qui pourrait être remplacé plus simplement par :

    this.resetForm(["Q"]);

     

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