abracadabraPDF › Forums › PDF – Général › Lier les choix possible d’une liste déroulante à une deuxième. RÉSOLU
- Ce sujet est vide.
-
CréateurSujet
-
15 janvier 2010 à 14:30 #43761jmroyerInvité
Bonjour,
Dans un formulaire où l’on aurait une première liste déroulante “Pays” et ensuite une deuxième liste déroulante “Villes” qui serait lié au choix faite dans la première. Comment dois-je procéder pour introduire la condition que si l’utilisateur choisit “Italie” alors dans “Villes”, affiche comme choix possibles “Rome”, “Florence, “Naples”. Par curiosité, jusqu’où on peut pousser la “cascade” de listes déroulantes ?
Merci.
-
CréateurSujet
-
AuteurRéponses
-
15 janvier 2010 à 18:11 #50458LionelMembre
Bonjour,
:ampoule: Une solution :
-créer une première liste déroulante (toujours visible) avec, par exemple, trois choix. Exemple : France Italie et Allemagne.
-ensuite, le choix France fait apparaître une seconde liste déroulante (masquée jusqu’alors) qui contient : Paris, Lyon, Marseille, Nantes…
-le choix Italie ferrait, lui, apparaître une troisième liste : Rome, Florence, Naples…
-Idem pour le choix “Allemagne” qui rendrait visible une quatrième liste…Quant au nombre maximum… :joker:
Lionel :bonjour:
15 janvier 2010 à 23:04 #50459MerlinMaître des clésThom Parker livre (gracieusement) tous les secrets des sous-menus déroulants ici : http://www.windjack.com/resources/howto/WJHowTo_JS_PopupMenus.html
Voir également les exemples ci-joint, du même auteur.
:bravo:
[attachment deleted by admin]
17 janvier 2010 à 11:04 #50460jmroyerInvitéBonjour,
Merci pour vos réponses.
Lionel > On peut l’afficher au même endroit cette seconde liste déroulante ? Et comment je lui dit le choix de la première ?
Merlin > Je pense que je vais décortiquer ça et tenter d’adapter une fonction car les menus de ce type, c’est trop old school pour mes clients.
A vous 2 > Où puis-je apprendre de façon facile (enfin j’entends par là pas trop technique pour débuter) le javascript ? Car pour le moment, je recopie mais je comprends pas exactement les commandes qui s’exécutent.
17 janvier 2010 à 11:42 #50461MerlinMaître des clésJe ne comprend pas bien “old school”, qu’est-ce qui ne va pas ?
Ce sont des menus déroulants en cascade comme on en voit tous les jours.
??:Pour apprendre le JavaScript il faut soit une formation : http://www.knowup.com/formation/deroules-cours/81/javascript-javascript.htm
soit s’accrocher aux branches en lisant les docs :
AcroJS :
http://partners.adobe.com/public/developer/en/acrobat/sdk/AcroJS.pdfAcroJS guide du JavaScript :
http://www.adobe.com/devnet/acrobat/pdfs/AcroJSGuide.pdfLe SDK est également très utile car bourré d’exemples :
http://www.adobe.com/devnet/acrobat/:bravo:
17 janvier 2010 à 12:21 #50462jmroyerInvitéJe ne cherchais à pas te froisser, désolé “old school” n’est peut être pas le bon mot mais c’est pas très esthétique.
Je cherche pour des listes et non des menus. Merci pour ces liens que je ne connaissais pas
17 janvier 2010 à 12:33 #50463MerlinMaître des clésJe ne suis pas du tout vexé, je cherche à comprendre.
Peut-être trouvera tu ton bonheur avec les champs “zones de liste” d’Acrobat, qui se présentent un peu différemment et qui permettent de déclencher une action (JavaScript ou autre) au changement de sélection par l’utilisateur.
Ce qui est plus difficile à faire avec les champs “menu déroulants”.
17 janvier 2010 à 13:00 #50464jmroyerInvitéEn fait, j’ai trouvé un exemple (le bon de commande dynamique) dans le dossier des ressources de Acrobat Designer 8 (sur PC) mais j’arrive pas à comprendre comment Adobe a procédé. Ça reste très opaque.
Je peux le joindre à un message sur ce forum si j’y suis autorisé ?
17 janvier 2010 à 14:17 #50465LionelMembreBonjour,
Lionel > On peut l’afficher au même endroit cette seconde liste déroulante ? Et comment je lui dit le choix de la première ?
1.Oui, il est possible de superposer des listes déroulantes (enfin tout objet dynamique). Je te conseille de les décaler d’un ou deux pixels les uns par rapport aux autres.
2.Avec, de mémoire, une valeur d’exportation.
Puis, script du style, si valeur d’exportation = Italie alors fit apparaître la liste VillesItalie, si valeur d’exportation = France alors fait apparaître la liste VillesFrance… (pour le javascript, :merlin: t’aidera mieux que moi.Je peux le joindre à un message sur ce forum si j’y suis autorisé ?
Oui.
Bien cordialement. :bonjour:
Lionel17 janvier 2010 à 15:44 #50466jmroyerInvitéVoici le fichier des exemples Adobe Designer.
[attachment deleted by admin]
18 janvier 2010 à 07:34 #50467alexParticipantProblème:la sélection d’un item de la liste déroulante 1 met à jour une seconde liste déroulante.
La solution avec AcroForm (Champs créés directement sous Acrobat)
Deux listes déroulantes Liste1 et Liste2. Inutile de saisir les items.
1-Script d’ouverture de la page contenant les deux champs de sélection:
//Remplissage du premier menu déroulant Liste1:
console.clear();
//On définit un tableau des items de la liste mère et on la remplit:
Selecteur=new Array();
Selecteur=[“Garçons”,”Filles”]
f1=this.getField(“Liste1”)
f1.clearItems();
index=0;
while(index{
f1.insertItemAt(Selecteur[index],index,index)
index=index+1;
}
//Fin remplissage Liste1 mère
//On définit les listes filles (autant de listes que d’items de Liste1)
Liste=new Array();
Liste[0]=[“Jean”,”Alain”,”François”,”Pierre”,”Damien”,”Alex”,”Mike”]
Liste[1]=[“Brigitte”,”Nicole”,”Marie”,”Julie”,”Cécile”,”Marion”,”Diane”,”Jufdith”,”Samia”,”Colette”,”Christine”]
//Fin définition des listes filles2-Script de la première liste déroulante Liste1, onglet Format>
Catégorie de format>Personnalisé
Script de touches personnalisé
//Remplissage du second menu déroulant
if(!event.willCommit)
{
//On définit les items de Liste2 à chaque fois que Liste1 est solliscité:
f2=this.getField(“Liste2”);
f2.delay=true;
f2.clearItems();
j=0;
while(j{
f2.insertItemAt(Liste[event.changeEx][j],j,j)
j=j+1;
}
f2.currentValueIndices=0;
f2.delay=false;
}18 janvier 2010 à 17:21 #50468MerlinMaître des clés:soleil:
:bravo:19 janvier 2010 à 13:05 #50469jmroyerInvitéMerci beaucoup Alex pour ta réponse.
Il y a juste un soucis avec ton point 1. Une fois que je relance le document, la première liste déroulante propose “Garçons, Filles” va m’afficher dans la deuxième les prénoms masculins. Une erreur sur la ligne Selecteur=[“Garçons”,”Filles”] ?
[attachment deleted by admin]
19 janvier 2010 à 16:41 #50470alexParticipantJ’ai remplaçé une chaîne de caractères que l’éditeur du forum m’a mangé , tu peux donc recopier le script 1 d’ouverture de page.
Je donnerai aussi la solution pour Adobe LiveCycle Designer dont les grandes lignes apparaissent dans le sujet précédant.
Pour info, Merlin, j’ai été obligé de remplacer (sans les ) par [index]
Bonne soirée à tous.21 janvier 2010 à 16:53 #50471jmroyerInvitéEffectivement, ça marche beaucoup mieux. Merci beaucoup.
Si je dois utiliser plusieurs fois (plusieurs listes déroulantes communicantes avec des données différentes) ce code dans le même document. Il me suffit bien de dupliquer en changeant les Liste1 et Liste2 ?
21 janvier 2010 à 17:12 #50472alexParticipantNon, il faut revoir le code car les tables Liste[ x ] doivent être différentes pour chacune des listes déroulantes mères. Il faudra donc créer de nouvelles tables style Liste[ y ][ x ] où y est l’indice du couple et x l’indice de chaque série. Je vais essayer de généraliser pour n couples de listes déroulantes… puis je mettrai une maquette à disposition pour tous.
21 janvier 2010 à 17:32 #50473jmroyerInvité(encore) merci de ton aide et de tes explications, j’apprends au fur et à mesure :extra:
22 janvier 2010 à 18:02 #50474alexParticipantNous sommes donc sous Acrobat PRO (versions 7,8,9), le formulaire a été développé avec AcroForm.
Deux scripts font le travail:
Le premier, (qui ne travaille qu’une fois à l’ouverture du document par exemple) assure le remplissage des items des sélecteurs (listes déroulantes mères) ainsi que la construction des tables Liste(x,y)
x est l’index du couple mere/fille.
y est l’index de l’occurence mère.function RemplissageMere()
{
//Remplissage du premier menu déroulant Liste1:
console.clear();
//Paramétrage du nombre de couples mere/fille du document
NbreCouples=5;
//On définit les tableaux:
Selecteur=new Array();
Liste=new Array();
indexCouple=1;
while (indexCouple<=NbreCouples)
{
Selecteur[indexCouple]=new Array();
Liste[indexCouple]=new Array();
indexCouple=indexCouple+1;
}
//On définit les listes mères/filles (autant de Listes filles que d’items du Selecteur mère), le nombre d’items est libre
//Premier couple par exemple:
Selecteur[1]=[“Garçons”,”Filles”]
Liste[1][0]=[“Jean”,”Alain”,”François”,”Pierre”,”Damien”,”Alex”,”Mike”]
Liste[1][1]=[“Brigitte”,”Nicole”,”Marie”,”Julie”,”Cécile”,”Marion”,”Diane”,”Judith”,”Samia”,”Colette”,”Christine”]
//Fin du premier couple
//Second couple pour exemple:
Selecteur[2]=[“France”,”Allemagne”,”Italie”,”Espagne”,”Belgique”]
Liste[2][0]=[“Paris”,”Bordeaux”,”Lille”,”Strasbourg”,”Lyon”,”Grenoble”]
Liste[2][1]=[“Berlin”,”Bonn”,”Munich”,”Brême”];
Liste[2][2]=[“Rome”,”Milan”,”Gênes”,”Bologne”];
Liste[2][3]=[“Madrid”,”Barcelonne”,”Valence”];
Liste[2][4]=[“Bruxelles”,”Gand”,”Namur”];
//Fin du second couple
//Couple 3 pour exemple:
Selecteur[3]=[“Europe”,”Amérique”]
Liste[3][0]=[“Bruxelles”,”Paris”,”Oslo”,”Londres”,”Berlin”,”Madrid”,”Rome”,”Athène”,”Milan”]
Liste[3][1]=[“New-York”,”Montreal”,”Toronto”,”La Paz”,”Panama”];
//Fin du couple 3.
//Couple 4 pour exemple:
Selecteur[4]=[]
Liste[4][0]=[]
//Fin du couple 4
//Couple 5 pour exemple:
Selecteur[5]=[];
Liste[5][0]=[];
//Fin du couple 5
//………………………..Autres définitions si nécessaire.
//Remplissage des listes mères (sélecteurs)
indexCouple=1;
while (indexCouple<=NbreCouples)
{
this.getField(“ListeMere”+indexCouple).clearItems();
this.getField(“ListeFille”+indexCouple).clearItems();
indexItem=0;
while(indexItem{
this.getField(“ListeMere”+indexCouple).insertItemAt(Selecteur[indexCouple][indexItem],indexItem,indexItem)
indexItem=indexItem+1;
}
indexCouple=indexCouple+1;
}
//Fin remplissage Liste mère
}Un second script général, lançé par les sélecteurs, met à jour les listes filles:
Attention à son mode de lancement.onglet Format>
Catégorie de format>Personnalisé
Script de touches personnalisé>
function RemplissageFille()
{
console.clear();
//On définit les items de Liste fille de rang indexCouple à chaque fois que le sélecteur mère est solliscité:
//Nom du sélecteur solliscité:
NomSelecteur=event.target.name;
console.println(“Sélecteur activé:”+NomSelecteur)
//Détermination du rang:
longueuralpha=”ListeMere”.length;
console.println(“Longueur de la partie alpha:”+longueuralpha)
indexCouple=NomSelecteur.substring(longueuralpha,NomSelecteur.length);
console.println(“index du couple:”+indexCouple)
ffille=this.getField(“ListeFille”+indexCouple);
console.println(“Liste mise à jour: ListeFille”+indexCouple)
ffille.delay=true;
ffille.clearItems();
indexItem=0;
while(indexItem{
ffille.insertItemAt(Liste[indexCouple][event.changeEx][indexItem],indexItem,indexItem)
indexItem=indexItem+1;
}
ffille.currentValueIndices=0;
ffille.delay=false;
}22 janvier 2010 à 18:17 #50475alexParticipantVous trouverez ci-joint l’exemple décrit ci-dessus pour 4 couples de menus liés. Il n’y a pas de limite, la seule contrainte étant de respecter le nom des listes déroulantes soit ListeMerex pour les sélecteurs et ListeFillex pour les listes associées.
Bon week-end à tous.[attachment deleted by admin]
22 janvier 2010 à 18:48 #50476MerlinMaître des clés:bravo:
12 août 2010 à 15:02 #50477pepitos137MembreBonjour à tous, je suis nouveau sur ce forum.
Dans ce super échange, vous expliquez exactement ce que je veux faire c’est à dire lier les choix possible d’une liste déroulante à une deuxième. Malgré tous mes efforts je n’ai toujours pas réussi.
Mon problème, je crois, c’est que le script est fait avec pour acroform et moi je travail avec Livecycle.
Première question: Est-ce que le script fonctionne avec LiveCycle?
si oui :contentdance:
Deuxième question: Expliquez-moi s.v.p. ou je dois le coller dans LiveCycle pour que sa fonctionne.
Un gars qui vire en rond depuis deux jours.
Pépitos.
12 août 2010 à 15:19 #50478MerlinMaître des clésBonjour,
hélas la réponse est non…
On peut certainement adapter ce JavaScript à Designer, mais je ne sais pas comment.
??:12 août 2010 à 15:28 #50479pepitos137MembreJ’ai remplaçé une chaîne de caractères que l’éditeur du forum m’a mangé , tu peux donc recopier le script 1 d’ouverture de page.
Je donnerai aussi la solution pour Adobe LiveCycle Designer dont les grandes lignes apparaissent dans le sujet précédant.
Pour info, Merlin, j’ai été obligé de remplacer (sans les ) par [index]
Bonne soirée à tous.Il est écris: “Je donnerai aussi la solution pour Adobe LiveCycle Designer”. Cela serait sympa :bravo :bravo:
Je vais attendre pour une solution.
12 août 2010 à 15:35 #50480MerlinMaître des clésalex est actuellement en vacances, patience donc…
😎12 août 2010 à 15:43 #50481pepitos137MembreMerci à toi Merlin pour tes réponses rapides.
Moi aussi, je pars en vacance, demain vendredi, pour 10 jours ouvrables.
Donc, je vérifierai ce topic lors de mon retour.16 août 2010 à 19:52 #50482alexParticipantJ’ai comme l’impression que le script sous Adobe Designer (pardon, Adobe LiveCycle Designer) est attendue… avec insistance?
Hum.
Il va falloir:
1-Que je me résigne à quitter ce Mac pour retourner à mon PC (j’espère qu’il n’y aura pas trop de mises à jour à faire avant de travailler) …
2-Que mes clients soient encore en vacances… Et les autres pas trop pressés.
3-Que je me retrouve dans Designer (hiérarchie des objets pas intuitive même pour moi qui aime bien bricoler les codes).
Ces conditions réunies, ça devrait être fait début septembre (seconde semaine), désolé, je ne peux faire mieux.En attendant, suite à un petit échange avec Merlin, je lui ai envoyé pour vérification une version du script qui préserve les valeurs d’export des menus déroulants lors des exports de données, toujours destinée aux formulaires créés sous Acrobat (AcroForm), ainsi qu’une maquette qu’il mettra en ligne si tout va bien.
31 août 2010 à 19:24 #50483MerlinMaître des clésEn attendant, suite à un petit échange avec Merlin, je lui ai envoyé pour vérification une version du script qui préserve les valeurs d’export des menus déroulants lors des exports de données, toujours destinée aux formulaires créés sous Acrobat (AcroForm), ainsi qu’une maquette qu’il mettra en ligne si tout va bien.
J’ai tout bien reçu, c’est justement au programme de demain. A suivre…
:fleche:9 septembre 2010 à 13:13 #50484pepitos137MembreJ’ai comme l’impression que le script sous Adobe Designer (pardon, Adobe LiveCycle Designer) est attendue… avec insistance?
J’aimerais savoir si l’attente va être encore long ?
Pepitos
11 septembre 2010 à 10:49 #50485alexParticipantAttention: Acrobat PRO et LiveCycle Designer sur Pc uniquement.
Voici la première partie de la réponse…
La maquette jointe montre :
1-comment remplir les items d’une liste déroulante à partir d’un tableau après tri des données.
2-Comment effacer les items de cette liste.
Par ailleurs on voit comment faire pour atteindre les objets du formulaire et afficher des alertes (deux méthodes).
Pour voir les scripts, il faut bien sûr travailler sur Pc et ouvrir LiveCycle Designer à partir d’Acrobat PRO: Formulaires>Modifier le formulaire dans Designer, puis cliquer su l’onglet Gabarits et chaque bouton lançant un script JavaScript client.
Pour ne pas ouvrir la console lors de l’exécution des scripts, passer Console.show() en commentaire.
Pour comparer les scripts JavaScript d’Acrobat (AcroForm) et de Designer se référer à:
LiveCycleDesigner ES2 Scripting Basics
où il y a un tableau de conversion de scripts très utile.Je n’oublie pas, Pepitos, l’objectif de la liste liée, et vu le nombre de téléchargements de l’exemple sous Acrobat, il y a un record à battre!
Nota: non réalisble avec Scribus.
[attachment deleted by admin]
11 septembre 2010 à 11:12 #50486MerlinMaître des clésvu le nombre de téléchargement de l’exemple sous Acrobat
Oui, je n’avais pas fait attention : chapeau Alex !
Je posterai mon (adaptation de ton) exemple en début de semaine prochaine.
12 septembre 2010 à 09:23 #50487alexParticipantAttention: Acrobat PRO et LiveCycle Designer sur Pc uniquement.
Voici la solution complète… On peut voir le résultat sur Adobe Reader Mac ou Pc.Dans la maquette jointe :
1-Un script d’ouverture efface le contenu des menus déroulants.
Au passage, notez le déclencheur initialize et le placement des deux parties du script pour utiliser le champ d’information Texte1formulaire1::initialize – (JavaScript, client)
console.clear();
xfa.host.resetData();
console.println(“Informations:”);
TexteAlerte=”Reset des menus déroulants en ouverture de document.”;
console.println(TexteAlerte);formulaire1.#pageSet[0].Page1.Texte1::initialize – (JavaScript, client)
xfa.form.formulaire1.Page1.Texte1.rawValue=TexteAlerte;
2-Un script associé à un bouton élabore les tables de données et remplit le menu déroulant Mère. On aurait pu élaborer les tables à l’initialisation (c’est plus élégant).
Au passage notez la manière classique de créer un tableau à deux dimensions:
…..
Fille=new Array();
x=0;
while(x{
Fille[x]=new Array();
x=x+1;
}
…..
NB:j’ai mis des [ et des ] car l’éditeur du forum me refuse ici les crochets!3-Un script lançé lors de la sélection d’un item Mère remplit le menu déroulant Fille.
Il vaut mieux opter pour le déclencheur exit :
formulaire1.#pageSet[0].Page1.Liste_M::exit – (JavaScript, client)Merci d’avoir attendu!
[attachment deleted by admin]
12 septembre 2010 à 10:17 #50488MerlinMaître des clésNB:j’ai mis des [ et des ] car l’éditeur du forum me refuse ici les crochets!
Il faut utiliser la balise Code pour désactiver les BB-codes et/ou les balises HTML :
Code:Ceci est un {code} contenant des balises désactivées.:soleil:
13 septembre 2010 à 06:39 #50489alexParticipantJe me lance, on aurait:
Code:…..
Fille=new Array();
x=0;
while(x{
Fille[x]=new Array();
x=x+1;
}
…..Un moyen d’avoir une police plus grosse comme en HTML?
13 septembre 2010 à 08:31 #50490MerlinMaître des clésNon, je ne trouve pas d’option permettant de modifier la taille des polices dans les messages.
Il faudrait rentrer dans le code PHP…!
:Euuuh:13 septembre 2010 à 18:40 #50491pepitos137MembreMerci, Merci, Merci Alex et Merlin.
Sa fonctionne parfaitement.
Est-il possible de supprimer l’utilisation des boutons et de la case texte “Information” et que le tout fontionne aussi parfaitement ?
On aurait pu élaborer les tables à l’initialisation (c’est plus élégant).
Est-ce cela que tu voulais dire ?
Merci encore.
13 septembre 2010 à 19:13 #50492alexParticipantOui, on peut supprimer le champ d’information, à condition de supprimer aussi les lignes le concernant (avec Texte1).
La partie du script destinée à construire les tableaux peut être effectuée en initialisation (ouverture du document).
Je fournirai une version qui illustre ça dès que possible, pas demain.
Bonne soirée.21 septembre 2010 à 15:43 #50493pepitos137MembreBonjour,
Toujours en attente de la nouvelle version.
Merci de votre aide.
22 septembre 2010 à 18:16 #50494alexParticipantLes formulaires développés sous AcroForm (directement sous Acrobat PRO sur Mac ou PC) ne peuvent être repris que sous Acrobat PRO.
Les formulaires développés sous LiveCycle Designer (sur PC uniquement) ne peuvent être repris que sous LiveCycle Designer.Si vous ouvrez un formulaire LiveCycle sous Acrobat vous remarquerez que les outils de création de formulaire AcroForm sont désactivés (le document n’est donc pas protégé).
Il n’y a pas de moyen simple de passer de l’un à l’autre, les formats et les langages de script diffèrent.
Pour cette raison, je vous ai proposé deux maquettes de menus déroulants inter-dépendants.
J’ai déjà expliqué les avantages et les inconvénients des deux types de formulaires sur ce forum.]9 février 2012 à 13:31 #50495pikmin04MembreBonjour, je viens de lire ce super article et j’ai bien réussi à lier ma table mère avec ma table fille.
Cependant, je n’arrive à lier une autre table fille avec la première.
Par exemple, je voudrais créer 3 menu déroulant:
-La table mère “Continent” {Asie, Europe, Afrique}
-La table fille 1 “Pays” {Chine,Japon,France,Allemagne,Algérie,Marco} ====> Jusque là c’est bon
-La table Fille 2 “Ville” {Pekin, Shangai, Paris, Nantes, Berlin, Bonn etc…}Si tu as la solution ce serait génial
Edit: En fait c’est bon j’ai réussi juste après avoir poster cette question. J’ai completer mon script d’ouverture en recopiant le premier et en changeant simplement le nom de la variable LISTE en LISTEf (pour liste fille ^^). J’ai repris le script dans la liste2 et c’est ok
10 février 2012 à 07:26 #50496pikmin04MembreBon ben en fait ma solution n’a pas fonctionnée du tout…
Si tu pouvais m’expliquer comment faire ce serait super sympa
Merci d’avance!
10 février 2012 à 09:04 #50497alexParticipantEn effet, il faut revoir le script initial pour qu’il s’adapte aux trois niveaux (Continent,Pays,Ville) au lieu des deux niveaux de l’exemple précédant. Accordez moi quelques jours, je vais vous proposer une solution AcroForm uniquement…
11 février 2012 à 17:55 #50498alexParticipantVoilà une maquette pour illustrer une solution à votre problème si ça peut vous dépanner. Attention, la définition des tables n’est pas complète (limitée à Afrique et Europe), saurez-vous vous en débrouiller ?
On peut supprimer le bouton “Init”, l’initialisation se fait avec l’ouverture de page (script Initialisation())
Les deux autres scripts sont lançés:
1-par action du menu déroulants de niveau 1 (les continents) pour RemplissageFille()
2-par action du menu déroulants de niveau 2 (les pays) pour RemplissagePetiteFille()Les villes sont répertoriées dans les liste ListeN3 comme suit:
c est le rang du continent issu de la liste ListeN1 des continents.
p est le rang du pays issu de la liste ListeN2[c] des pays.
ListeN3[c][p]=[“Ville1″,”Ville2″,”Ville3″,”Ville4″,”Ville5”];Aucune des listes de niveau 1, 2 ou 3 n’est limitée en nombre.
On peut adapter ce système à une autre hiérarchie (il suffit de modifier les tables du script d’initialisation).
[attachment deleted by admin]
13 février 2012 à 12:16 #50499pikmin04MembreWahoou merci beaucoup Alex! Ca marche nickel!
Il ne me reste qu’un seul petit problème maintenant.Ce fichier envoie les données en HTML vers une base de données. Il y a plusieurs autres informations dedans.
Mais pour les listes déroulantes, au lieu de me retourner le contenu du champ, il me retourne la position du choix dans la liste.
Par exemple pour Afrique/Algérie/Oran, il me renvoie Les positions 0, 0 et 3.Est ce que tu sais comment lui faire renvoyer le texte?
Encore une fois merci beaucoup
13 février 2012 à 18:48 #50500MerlinMaître des clésJ’ai déjà expliqué les avantages et les inconvénients des deux types de formulaires sur ce forum.
==> http://abracadabrapdf.net/articles.php?lng=fr&pg=640
:bonjour:
13 février 2012 à 18:51 #50501MerlinMaître des clésLes formulaires développés sous AcroForm (directement sous Acrobat PRO sur Mac ou PC) ne peuvent être repris que sous Acrobat PRO.
Les formulaires développés sous LiveCycle Designer (sur PC uniquement) ne peuvent être repris que sous LiveCycle Designer.Si vous ouvrez un formulaire LiveCycle sous Acrobat vous remarquerez que les outils de création de formulaire AcroForm sont désactivés (le document n’est donc pas protégé).
Il n’y a pas de moyen simple de passer de l’un à l’autre, les formats et les langages de script diffèrent.J’ai découvert un truc génial qui rend enfin (un peu) utile cette grosse bouse d’Aperçu ( http://abracadabrapdf.net/articles.php?lng=fr&pg=405 ) : il faut ouvrir le formulaire XFA dans Aperçu et Enregistrer-sous au format PDF (normal).
On perd l’interactivité mais tous les champs sont bien là, prêts à être modifiés dans Acrobat.:idee:
13 février 2012 à 19:44 #50502alexParticipantBien vu Merlin, ça peut servir !
pikmin04, je regarde le problème de l’envoi des données vers un serveur, effectivement en l’état on reçoit les indices des items et non les valeurs elles-même ce qui complique la tâche à l’arrivée à moins d’avoir une copie des mêmes tables dans le script du serveur (pHp ou CGI).Lorsque j’aurai une solution propre j’ouvrirai un nouveau fil “Listes déroulantes en cascade” …14 février 2012 à 12:38 #50503pikmin04MembreC’est peut-être plus du coté de la page php ou j’envoie mes données qu’il faut creuser.
Je vais essayer de voir si je peux récupérer la value du champ dans la variable $_POSTEdit: quoi que je fasse sous php, ca ne change rien. Tout ce que j’obtiens, c’est la valeur d’exportation de chaque champ des listes déroulantes.
1 mars 2012 à 12:34 #50504pikmin04MembreSalut Alex. Est ce que tu as trouvé comment garder les listes liées entre elles tout en renvoyant des valeurs d’exportation interprétable?
Merci d’avance
8 mars 2012 à 11:40 #50505alexParticipantDans cette version (à tester), vous trouverez la méthode définissant les listes déroulantes avec des valeurs d’export en clair (plus pratique pour récupérer les données sur un serveur). Attention, les listes sont à compléter pour fonctionner dans tous les cas de figure. L’initialisation peut être lancée en ouverture de page et on peut donc supprimer le bouton.
[attachment deleted by admin]
8 mars 2012 à 17:45 #50506alexParticipantDans cette version fonctionnellement identique à la précédente toujours sous AcroForm, le script détecte l’éventuelle absence de listes d’items. Pour retrouver la console et suivre l’historique du déroulement du programme sous Acrobat (Ctrl-J SUR PC ou POMME-J sur MAC). J’espère avoir répondu à votre dernier problème.
Ce sujet semble avoir un gros succès…
[attachment deleted by admin]
13 mars 2012 à 14:15 #50507pikmin04MembreMerci beaucoup Alex! C’est plus que parfait
13 mars 2012 à 14:46 #50508MerlinMaître des clésTout à fait d’accord !
:bravo:4 décembre 2012 à 15:01 #50509pipotoflutoMembreDans cette version (à tester), vous trouverez la méthode définissant les listes déroulantes avec des valeurs d’export en clair (plus pratique pour récupérer les données sur un serveur). Attention, les listes sont à compléter pour fonctionner dans tous les cas de figure. L’initialisation peut être lancée en ouverture de page et on peut donc supprimer le bouton.
Bonjour,
J’ai adapté cette solution à ce que je souhaite faire, mais uniquement pour une liste déroulante mère et une fille (pas de petite fille).
ça a l’air de fonctionner
:bravo:
mon problème est que dans le formulaire que je suis en train de créer je dois faire d’autres couples dans liste déraoulante de ce style.
Comment puis je en rajouter ?
En vous remerciant par avance.
:bonjour:
4 décembre 2012 à 17:46 #50510MerlinMaître des clésEt bien, sous réserve de confirmation par Alex, je dirais qu’il suffit de modifier le nom des variables utilisées dans le script, en les incrémentant par exemple.
:joker:4 décembre 2012 à 18:07 #50511alexParticipantOui, il faut réouvrir le capot et généraliser à n hiérarchies mères/filles/petites filles… Il faudra d’une part patienter un peu, d’autre part se contenter d’une solution acroForm…
18 avril 2016 à 18:01 #50512AnxionetMembreBonjour;
J’essai d’utiliser ce script pour une formulaire avec une seule couple. Ma question est très simple, peut être pour vous, mais je n’y connais pas beaucoup à ce sujet.
Où je dois coller le premier script?
Le deuxième pour le remplissage de la liste fille, j’ai vu qui va sur l’onglet format, mais pour le premier je ne vois pas où le coller. Merci de votre aide !Nous sommes donc sous Acrobat PRO (versions 7,8,9), le formulaire a été développé avec AcroForm.
Deux scripts font le travail:
Le premier, (qui ne travaille qu’une fois à l’ouverture du document par exemple) assure le remplissage des items des sélecteurs (listes déroulantes mères) ainsi que la construction des tables Liste(x,y)
x est l’index du couple mere/fille.
y est l’index de l’occurence mère.function RemplissageMere()
{
//Remplissage du premier menu déroulant Liste1:
console.clear();
//Paramétrage du nombre de couples mere/fille du document
NbreCouples=5;
//On définit les tableaux:
Selecteur=new Array();
Liste=new Array();
indexCouple=1;
while (indexCouple<=NbreCouples)
{
Selecteur[indexCouple]=new Array();
Liste[indexCouple]=new Array();
indexCouple=indexCouple+1;
}
//On définit les listes mères/filles (autant de Listes filles que d’items du Selecteur mère), le nombre d’items est libre
//Premier couple par exemple:
Selecteur[1]=[“Garçons”,”Filles”]
Liste[1][0]=[“Jean”,”Alain”,”François”,”Pierre”,”Damien”,”Alex”,”Mike”]
Liste[1][1]=[“Brigitte”,”Nicole”,”Marie”,”Julie”,”Cécile”,”Marion”,”Diane”,”Judith”,”Samia”,”Colette”,”Christine”]
//Fin du premier couple
//Second couple pour exemple:
Selecteur[2]=[“France”,”Allemagne”,”Italie”,”Espagne”,”Belgique”]
Liste[2][0]=[“Paris”,”Bordeaux”,”Lille”,”Strasbourg”,”Lyon”,”Grenoble”]
Liste[2][1]=[“Berlin”,”Bonn”,”Munich”,”Brême”];
Liste[2][2]=[“Rome”,”Milan”,”Gênes”,”Bologne”];
Liste[2][3]=[“Madrid”,”Barcelonne”,”Valence”];
Liste[2][4]=[“Bruxelles”,”Gand”,”Namur”];
//Fin du second couple
//Couple 3 pour exemple:
Selecteur[3]=[“Europe”,”Amérique”]
Liste[3][0]=[“Bruxelles”,”Paris”,”Oslo”,”Londres”,”Berlin”,”Madrid”,”Rome”,”Athène”,”Milan”]
Liste[3][1]=[“New-York”,”Montreal”,”Toronto”,”La Paz”,”Panama”];
//Fin du couple 3.
//Couple 4 pour exemple:
Selecteur[4]=[]
Liste[4][0]=[]
//Fin du couple 4
//Couple 5 pour exemple:
Selecteur[5]=[];
Liste[5][0]=[];
//Fin du couple 5
//………………………..Autres définitions si nécessaire.
//Remplissage des listes mères (sélecteurs)
indexCouple=1;
while (indexCouple<=NbreCouples)
{
this.getField(“ListeMere”+indexCouple).clearItems();
this.getField(“ListeFille”+indexCouple).clearItems();
indexItem=0;
while(indexItem{
this.getField(“ListeMere”+indexCouple).insertItemAt(Selecteur[indexCouple][indexItem],indexItem,indexItem)
indexItem=indexItem+1;
}
indexCouple=indexCouple+1;
}
//Fin remplissage Liste mère
}Un second script général, lançé par les sélecteurs, met à jour les listes filles:
Attention à son mode de lancement.onglet Format>
Catégorie de format>Personnalisé
Script de touches personnalisé>
function RemplissageFille()
{
console.clear();
//On définit les items de Liste fille de rang indexCouple à chaque fois que le sélecteur mère est solliscité:
//Nom du sélecteur solliscité:
NomSelecteur=event.target.name;
console.println(“Sélecteur activé:”+NomSelecteur)
//Détermination du rang:
longueuralpha=”ListeMere”.length;
console.println(“Longueur de la partie alpha:”+longueuralpha)
indexCouple=NomSelecteur.substring(longueuralpha,NomSelecteur.length);
console.println(“index du couple:”+indexCouple)
ffille=this.getField(“ListeFille”+indexCouple);
console.println(“Liste mise à jour: ListeFille”+indexCouple)
ffille.delay=true;
ffille.clearItems();
indexItem=0;
while(indexItem{
ffille.insertItemAt(Liste[indexCouple][event.changeEx][indexItem],indexItem,indexItem)
indexItem=indexItem+1;
}
ffille.currentValueIndices=0;
ffille.delay=false;
}18 avril 2016 à 19:16 #50513MerlinMaître des clésBonjour.
Comme leur premier mot l’indique, ces scripts sont des fonctions.
Ce qui veut dire qu’on doit préalablement les déclarer pour pouvoir les utiliser.Pour ça il suffit de copier ces deux scripts en script de document, ce qui les déclare-initialise à l’ouverture du document.
Voir absolument : http://abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/les-differents-niveaux-dutilisation-des-scripts-javascript/
et : http://abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/lordre-dexecution-des-evenements-dans-les-champs-de-formulaire-pdf/Ensuite, dans le menu déroulant, ou dans un champ, il faut juste placer l’appel de la fonction là où c’est indiqué.
Par exemple :Code:RemplissageMere();ou
Code:RemplissageFille();:Smiley01:
25 mai 2016 à 14:58 #50514ln_0358MembreBonjour à vous,
Avant tout merci pour tous les éléments apportés par ce fil de discussion. je n’y connais rien mais j’ai pu adapter les scripts à nos besoin grâce aux explications.
Mais je bute sur un dernier point (…et je sais que ma question va énerver les informaticiens, mille excuses)Alors voilà : l’exemple “listesliees3niveauxAcroformAvecSubmit2.pdf” sans le bouton de rechargement des listes conviendrait tout a fait pour nous (je produis un formulaire pour des utilisateurs qui sont TRES VITE destabilisés avec l’outil informatique, il faut que cela soit le plus simple possible sinon, ils impriment et remplissent le formulaire à la main), or cet exemple ne peut être qu’imprimé car les données sont réinitialisées même après enregistrement (lorsqu’on réouvre le formulaire). Nous voudrions récupérer des fichiers numériques et non pas rematérialiser le formulaire après saisie.
…alors à tout hasard, serait-il possible par un quelconque moyen de supprimer la fonction initialisation avec un bouton “enregistrer” spécial par exemple ??? ou par une tout autre méthode que vous m’indiquerez afin que le destinataire du formulaire puisse lire les choix saisis par l’utilisateur et que celui ci n’ait pas à manuellement recharger les listes pour compléter le formulaire ??
Mille mercis pour vos pistes ou avis sur ce problème !
26 mai 2016 à 22:43 #50515MerlinMaître des clésBonjour et bienvenue.
Peux tu partager ton formulaire ?
Car là tu parles de choses bien lointaines dans ma mémoire et je ne sais pas retrouver le PDF auquel tu fais allusion.
:geek:27 mai 2016 à 08:05 #50516bebarthMaître des clésbonjour,
d’après ce que je comprends, tu veux aplatir le formulaire ! c’est cela ???
pour aplatir tous le champs du fichier, la commande est :
this.flattenPages();
on peut aplatir certaines pages d’un fichier par contre, je ne pense pas que l’on puisse aplatir uniquement certains champs d’une page.
@+
:bonjour:27 mai 2016 à 09:39 #50517MerlinMaître des clésAdobe Acrobat Reader ne permet pas d’aplatir les champs de formulaire, même si le PDF est “Reader Extended”.
(En fait si on peut, mais ça requiert une activation de niveau 4, qui coûte un bras et demi, non disponible dans Acrobat et qui nécessite un Serveur Adobe LiveCycle. Voir : http://abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/pdf-reader-extended/ )
8 janvier 2020 à 12:13 #50518Alex WINDMembreBonjour à tous.
Je déterre un peu ce post.
Ma question va peut-être sembler débile.
Je souhaite faire des menus déroulant comme avec sous menu qui s’ouvrent en fonction des sélections du menu mère comme indiqué dans ce post.
Plusieurs personnes parlent de fichiers exemple, mais je n’arrive pas à récupérer les exemples qui pourraient m’aider.
Bien à vous.
PS : les fichiers exemples m’aideront à progresser car j’ai pas de compétence en js et j’ai pas vraiment le temps de les acquérir.
Pour l instant j’ai réussi à faire des formulaires avec Adobe Pro mais pas de double menu déroulants liés entre eux.
Merci par avance pour votre aide.8 janvier 2020 à 12:45 #50519MerlinMaître des clésBonjour, bienvenue et bonne année
Il me semble (de mémoire…) que les non-inscrits au forum ne peuvent pas accéder aux pièces jointes des messages, donc maintenant que tu l’es tu peux.
On parle justement du sujet qui t’intéresse dans cette discussion : https://abracadabrapdf.net/forum/index.php/topic,3823.0.html
:Smiley15:8 janvier 2020 à 18:38 #50520Alex WINDMembreMerci pour ton aide Merlin et bonne année à toi et à tous.
Je vais aller jeter un œil sur la discussion. -
AuteurRéponses
- Vous devez être connecté pour répondre à ce sujet.