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 1 année et 11 mois.
-
CréateurSujet
-
8 janvier 2023 à 09:01 #72310michel 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
-
CréateurSujet
-
AuteurRéponses
-
8 janvier 2023 à 19:43 #72311michel 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 ?
9 janvier 2023 à 09:58 #72312michel c.ParticipantJe 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
9 janvier 2023 à 10:49 #72313MerlinMaître des clésPour 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.
9 janvier 2023 à 10:52 #72314MerlinMaître des clésPour la suite il faudrait voir la pièce jointe…
😉
(Upload Errors: 03-ex.4_eleve-test.pdf: File exceeds allowed file size.)
9 janvier 2023 à 11:10 #72315michel c.ParticipantPardon, 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.”
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 11 mois par michel c..
9 janvier 2023 à 12:48 #72317MerlinMaître des clésComment envoyer/partager/poster une pièce jointe volumineuse :
😎
9 janvier 2023 à 12:58 #72318MerlinMaî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();");
}
}
9 janvier 2023 à 13:32 #72319MerlinMaî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;
}
}
9 janvier 2023 à 13:42 #72320MerlinMaître des clésAttention 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.
9 janvier 2023 à 14:03 #72321bebarthMaître des clésbonjour,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 11 mois par bebarth.
9 janvier 2023 à 16:07 #72323michel c.ParticipantMerci, 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
- Cette réponse a été modifiée le il y a 1 année et 11 mois par michel c..
9 janvier 2023 à 17:14 #72325michel c.ParticipantJ’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
9 janvier 2023 à 19:36 #72326MerlinMaître des clés“Cacher ou masquer les checkBox (R7.1 à R7.5) avec le script EditReps”
this.getField("R7").display = display.hidden;
9 janvier 2023 à 19:40 #72327MerlinMaî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;}
9 janvier 2023 à 19:41 #72328michel c.ParticipantOui, 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.
9 janvier 2023 à 19:48 #72329MerlinMaî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;}
}
9 janvier 2023 à 20:06 #72330MerlinMaî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;}
}
9 janvier 2023 à 20:50 #72334michel c.ParticipantMerlin 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 null
Lorsque 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 11 mois par michel c..
10 janvier 2023 à 14:22 #72346MerlinMaî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);}
}
10 janvier 2023 à 14:30 #72347MerlinMaî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);}
}
11 janvier 2023 à 09:42 #72350michel c.ParticipantMerci 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.
- Cette réponse a été modifiée le il y a 1 année et 11 mois par michel c..
11 janvier 2023 à 10:42 #72353MerlinMaî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.
11 janvier 2023 à 12:30 #72354michel c.ParticipantMerci, 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.
11 janvier 2023 à 17:33 #72357michel c.ParticipantJ’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 commeR.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
11 janvier 2023 à 20:50 #72365bebarthMaître des clésbonjour,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 !@+
😎11 janvier 2023 à 21:03 #72368bebarthMaître des clésJe 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…
@+
😎12 janvier 2023 à 00:21 #72370michel c.ParticipantMerci 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.
Merci encore
12 janvier 2023 à 09:33 #72373michel c.ParticipantJ’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….
12 janvier 2023 à 11:36 #72378michel c.ParticipantLe dernier fichier (j’ai essayé de faire un peu le ménage dans les scripts mais j’ai toujours des erreurs).
12 janvier 2023 à 15:51 #72379michel c.ParticipantJ’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.
13 janvier 2023 à 11:30 #72380michel c.ParticipantJ’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
16 janvier 2023 à 23:59 #72405michel c.ParticipantBonjour, 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
17 janvier 2023 à 12:30 #72409MerlinMaître des clésJe 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.
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.17 janvier 2023 à 13:02 #72411MerlinMaître des clésAutre 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;}
}
…
17 janvier 2023 à 13:36 #72413MerlinMaître des clésCependant 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; // !!!
}
17 janvier 2023 à 17:16 #72418michel c.ParticipantMerci, 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
17 janvier 2023 à 17:32 #72419michel c.ParticipantAutre 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
18 janvier 2023 à 08:55 #72422MerlinMaître des clésPour 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. 😉
18 janvier 2023 à 08:58 #72423MerlinMaître des clésAutre 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.
18 janvier 2023 à 09:06 #72424MerlinMaître des clésfor (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"]);
-
AuteurRéponses
- Vous devez être connecté pour répondre à ce sujet.