abracadabraPDF › Forums › PDF – Général › Listes déroulantes liées et champs associés
- Ce sujet est vide.
-
CréateurSujet
-
10 juin 2015 à 19:30 #45172
micka92
MembreBonsoir.
Après quelques recherches sur le forum, je n’ai pas trouvé le moyen de réaliser le formulaire que je souhaite :
– Afficher une liste déroulante à 3 choix
– Chaque choix de la première liste doit faire apparaître une seconde liste différente
– Le choix de cette seconde liste doit faire apparaître une valeur dans un champ n°1
– Le choix de cette seconde liste doit faire apparaître une valeur dans un champ n°2Le formulaire doit être utilisé sur iPad (PDF Expert).
En espérant avoir été suffisamment explicite dans ma demande.
Cordialement.
-
CréateurSujet
-
AuteurRéponses
-
11 juin 2015 à 13:58 #59063
jeanine63000
MembreBonjour,
Essaye une recherche en “mère fille” ou “menu déroulant en cascade”.16 juin 2015 à 22:13 #59064micka92
MembreBonsoir.
J’ai bien réussi à modifier à ma sauce le script d’un fichier sur le forum nommé “Abracadabra_Menu deroulant_Liste mere fille.pdf”.
Problème : en modifiant les choix des menus sur ce fichier cela fonctionne parfaitement. En copiant-collant le script sur un nouveau fichier (ma création), cela ne fonctionne plus. J’ai un message d’erreur m’indiquant “Liste fille *Choix menu 1* non définie”. J’ai pourtant bien repris les deux scripts de page ainsi que le script de touches personnalisé…
Si quelqu’un peut m’aider ! :mur:
16 juin 2015 à 22:32 #59065Merlin
Maître des clésBonjour.
C’est parce-que tu ne copies que la partie émergée de l’iceberg.
L’essentiel des scripts est placé en “Script de document”, voir chapitre 3 sur cette page : http://abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/les-differents-niveaux-dutilisation-des-scripts-javascript/:idee:
17 juin 2015 à 05:39 #59066micka92
MembreBonjour Merlin.
J’ai bien recopié le script de document (que j’ai appelé script de page dans mon précédent post… :Ooops: ). J’ai le même message d’erreur que sur le fichier “Abracadabra_Menu deroulant_Liste mere fille” si je choisis Amérique du Sud puis Brésil (ce qui est normal puisque dans le script de document “Initialisation”, il n’a pas été défini de liste petite-fille pour le Brésil).
J’ai tenté de réduire le nombre de choix à 4 sur ma liste fille car je pensais que cela pouvait venir de cela (ça peut aller à 20 pour mon besoin) mais ça ne marche toujours pas…
17 juin 2015 à 06:38 #59067micka92
MembreJe viens de tenter un vrai copier coller avec les mêmes valeurs, les mêmes scripts, les mêmes noms de champs etc mais cela ne fonctionne pas.
Je me pose la question de savoir comment le script de document se lance au démarrage ? Y-a-t’il un réglage à faire quelque part que je ne ferai peut-être pas dans mon nouveau document ?
17 juin 2015 à 08:10 #59068Merlin
Maître des clésOuvre ton document de travail, dans ce document de travail tu importes le document d’exemple qui contient les scripts de document (panneau Pages : Importer des pages).
Et ensuite tu supprimes immédiatement les pages importées.Résultat : tous les scripts de document ont été transférés (intacts) dans ton document de travail !
:extra:17 juin 2015 à 11:05 #59069micka92
MembreJe viens de faire la manip. Cela fonctionne parfaitement tant que je ne ferme pas le fichier. Si je l’enregistre, le ferme et l’ouvre à nouveau, j’ai le même problème qu’avant.
17 juin 2015 à 11:57 #59070Merlin
Maître des clésA partir de là, soit tu fais passer un exemple de ton document soit on joue aux devinettes…
:Smiley15:17 juin 2015 à 16:35 #59071micka92
MembreBonsoir.
Vous trouverez ci-joint un exemple du problème concerné. Le champ “ld_ff1” est la liste mère et le champ “ld_ff2” la liste fille.
20 juin 2015 à 09:16 #59072micka92
MembreJe n’y arrive toujours pas… :mur:
Si j’ajoute le fichier “Abracadabra_Menu deroulant_Liste mere fille”, soit la liste fille fonctionne, soit la liste mère perd ses valeurs enregistrées. Quoiqu’il arrive, en enregistrant/fermant le fichier et l’ouvrant à nouveau, j’ai toujours le message d’erreur “Liste fille *Choix menu 1* non définie”.
20 juin 2015 à 14:46 #59073Merlin
Maître des clésSi j’ajoute le fichier “Abracadabra_Menu deroulant_Liste mere fille”
Où trouve t’on ce document ?
21 juin 2015 à 18:54 #5907422 juin 2015 à 08:52 #59075brumbies
MembreBonjour,
Quelques Pistes…
1) tu dois Initialiser tes listes à l’ouverture du document… Met en script d’ouverture ta fonction “Initialisation();”
2) ta fonction initialisation comporte une ligne qui a 1 élément de trop et qui ne permet donc pas l’insertion d’Item sur tes listes…
Ton code : this.getField(“ld_ff1”).insertItemAt(ListeN1[indexTypeFF],ListeN1[indexTypeFF],ListeN1[indexTypeFF],indexTypeFF)
Celui qui est correct : this.getField(“ld_ff1”).insertItemAt(ListeN1[indexTypeFF],ListeN1[indexTypeFF],indexTypeFF)Essai ce devrait mieux fonctionner…
:Smiley01:
22 juin 2015 à 18:02 #59076micka92
MembreBonsoir.
J’ai modifié la ligne en erreur mais en ce qui concerne le script d’ouverture… je ne vois pas comment faire. J’ai cherché sur le forum quelques sujets à propos de cela mais je ne pige pas :Ooops:
22 juin 2015 à 21:32 #59077brumbies
MembreBonsoir,
Tu l’as peut être déjà indiqué mais tu utilises quelle logiciel pour créer ton PDF? et quelle version?
:Smiley01:23 juin 2015 à 06:09 #59078micka92
MembreBonjour.
J’utilise Adobe Acrobat XI Pro et le formulaire sera utilisé sur iPad avec PDF Expert 5.
23 juin 2015 à 08:00 #59079brumbies
MembreBonjour,
Donc tu peux procéder ainsi :
- Cliquez sur le bouton Vignettes de page, à gauche.
- Sélectionnez la vignette associée à la page qui vous intéresse, puis choisissez Propriétés de la page dans le menu Options
.
- Cliquez sur l’onglet Actions.
- Dans le menu Sélectionner le déclencheur, choisissez Ouverture de la page pour définir une action à l’ouverture de la page ou choisissez Fermeture de la page pour définir une action à la fermeture de la page.
- Choisissez “Exécuter un script javascript” dans le menu Sélectionner l’action, puis cliquez sur Ajouter.
[/list] :Smiley01:
23 juin 2015 à 13:13 #59080alex
ParticipantBonjour à tous,
Oui, on peut très bien lancer le script d’initialisation à l’ouverture de page.
On peut aussi le lancer à l’ouverture du document en utilisant la procédure suivante:function Initialisation()
{
//suite des opérations à effectuer…
}
Initialisation()C’est ce que j’ai illustré dans l’exemple joint.
23 juin 2015 à 19:51 #59081micka92
MembreBonsoir.
Merci à vous deux pour vos différentes solutions qui fonctionnent parfaitement.
Petite question pour ma culture personnelle : quelle est la différence entre les deux méthodes proposées ?
23 juin 2015 à 20:01 #59082micka92
MembreAutre petite question pour finaliser mon formulaire car j’ai fait des recherches mais je préfère en être sûr :
– Le script permettant d’envoyer un formulaire PDF par mail en reprenant un champ (deux idéalement) dans l’objet fonctionnera-t-il sur PDF Expert ?24 juin 2015 à 09:23 #59083brumbies
MembreBonjour,
1) Dans ton cas, il n’y a pas de différence entre les 2 méthodes au niveau du résultat recherché.
Celui d’Alex s’exécute à l’ouverture du document. Tandis que le mien ne s’exécute qu’à l’ouverture de la page.
Donc si la page que tu ouvres à l’ouverture contient le script il s’ouvrira à l’ouverture, alors que si ce n’est pas le cas il ne s’exécutera qu’après coup.
De plus, la méthode d’Alex est prioritaire sur les scripts de page dans l’ordre d’exécution des scripts….Donc pour résumer, ça va dépendre de ce que tu souhaites faire…
2) Il faut tester…
:Smiley01:25 juin 2015 à 12:00 #59084micka92
MembreMerci à tous pour votre collaboration. Mon formulaire fonctionne bien désormais.
Faute de trop bien faire (grâce à vous), on me demande désormais d’afficher un champ et du texte si une valeur précise de ma liste déroulante est choisie. J’ai cherché sur le forum mais entre les calques et tout le reste, j’ai peur de m’y perdre… :Ooops:
25 juin 2015 à 12:27 #59085micka92
MembreEn complément d’information, ce que j’appelle “texte à afficher” fait partie de ma trame de fond du document. Cela apparaît comme un champ modifiable uniquement en allant dans “Modification du contenu > Modifier le texte et les images”.
25 juin 2015 à 13:17 #59086Merlin
Maître des clésTu as le choix entre :
– placer par-dessus un champ de formulaire à fond blanc pour servir de cache,
– supprimer le texte de la page, et remplacer par un champ de formulaire qui s’affichera en fonction.
Dans les deux cas il vaudra mieux placer le déclencheur dans la liste déroulante.
25 juin 2015 à 21:10 #59087micka92
MembreMerci Merlin !
Cela marche parfaitement. Je suis content car j’arrive plus facilement à appréhender les scripts du site et à les adapter à mon formulaire (même si pour le coup, celui-là est très facile :jerisjaune: ).
Pour finaliser le tout, j’aimerais qu’un champ date s’écrive en rouge si la date inscrite est postérieure de plus de 365 jours à la date d’un autre champ date.
26 juin 2015 à 09:41 #59088brumbies
MembreBonjour,
As tu regardé le topic suivant?
http://abracadabrapdf.net/forum/index.php/topic,2662.msg14500.html#msg14500
Avec l’exemple d’Alex et en l’adaptant légèrement tu devrais pouvoir réussir à faire ce que tu veux…ensuite pour modifier la couleur du texte d’un champs on peut utiliser:
Code:var f = this.getField(“myField”);
f.textColor = color.red;ensuite pour le remettre en noir: color.black
:Smiley01:30 juin 2015 à 08:22 #59089micka92
MembreBonjour.
Effectivement, le script répond à mes attentes mais je n’arrive pas obtenir le résultat que je veux, c’est-à-dire que le texte s’affiche en rouge.
En effet, j’ai modifié la condition de contrôle par “if ecartJ<-365" et le résultat escompté est le bon. Toutefois, le contenu du champ disparaît quand la condition est validée. Je ne comprends pas pourquoi...
30 juin 2015 à 08:38 #59090brumbies
MembreBonjour,
Le plus simple serait que tu post un exemple actualisé de ton fichier…
:Smiley01:30 juin 2015 à 09:04 #59091micka92
MembreVoilà !
30 juin 2015 à 10:30 #59092brumbies
MembreC’est tout de suite plus facile … :geek:
donc ton problème est que tu as définit en script de document une fonction Controle() que tu n’appelles pas … donc rien ne peut s’exécuter !
L’astuce est de mettre au niveau de ton champs “c_dateverifdff” => Propriétés => Validation => Exécuter un script de validation personnalisé
et tu y places l’instrcution :
Controle();Ensuite attention, car si la date est supérieure à 1 an alors le texte “s’effacera” car tu as mis :
this.event.target.fillColor=color.transparent;:Smiley01:
30 juin 2015 à 15:32 #59093micka92
MembreAu temps pour moi, l’exemple que j’ai envoyé ne comprends pas l’activation du script que j’ai bien dans mon document original sur le champ “Date 2”. Tout comme la couleur rouge qui est bien présente sur mon formulaire. J’ai donc envoyé un exemple en partant d’une mauvaise version désolé :Ooops: .
En prenant le bon document, ma date disparaît toujours quand elle est supérieure à un an :
this.event.value=””;this.event.target.textColor=color.red;Par contre, si je sélectionne le champ, alors il apparaît en rouge après… :oh:
Pour finir, à quoi sert la ligne ? : this.event.target.fillColor=this.getField(“c_dateinter”).fillColor;
30 juin 2015 à 15:35 #59094micka92
MembreBizarre… à la première date supérieure d’un an que j’ai mise, elle disparaît. Puis, si je saisis une nouvelle date, qu’elle soit supérieure ou inférieur à un an, elle reste en rouge.
30 juin 2015 à 18:53 #59095brumbies
MembreOk je n’avais pas vu la ligne this.event.value=””;
qui réinitialise à “vide” la valeur de ton champs Date2 => donc dans ton script si la condition était vrai alors la valeur disparaissait.De plus la fonction filColor modifie la couleur de fond et non la couleur du texte, donc inutile dans ton cas…
donc si la condition est vrai => alors la couleur de fond se met en rouge
sinon => elle se met de la même couleur que celle de ton champ “c_dateinter” ………. qui n’existe pas !donc je modifierai le code suivant
Code:if(ecartJ<0)
{
this.event.value=””;
this.event.target.fillColor=color.transparent;
}
else
{
this.event.target.fillColor=this.getField(“Date1”).fillColor;
}par
Code:if(ecartJ<-365) // pour prendre en compte la différence d'un an en moins du champs Date2 par rapport à Date1
{
this.event.target.textColor = color.red;
}
else
{
this.event.target.textColor = color.black;
}:Smiley01:
-
AuteurRéponses
- Vous devez être connecté pour répondre à ce sujet.