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 #43761
jmroyer
Invité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 #50458
Lionel
MembreBonjour,
: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 #50459Merlin
Maî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 #50460jmroyer
Invité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 #50461Merlin
Maî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 #50462jmroyer
Invité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 #50463Merlin
Maî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 #50464jmroyer
Invité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 #50465Lionel
MembreBonjour,
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 #50466jmroyer
InvitéVoici le fichier des exemples Adobe Designer.
[attachment deleted by admin]
18 janvier 2010 à 07:34 #50467alex
ParticipantProblè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 #50468Merlin
Maître des clés:soleil:
:bravo:19 janvier 2010 à 13:05 #50469jmroyer
Invité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 #50470alex
ParticipantJ’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 #50471jmroyer
Invité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 #50472alex
ParticipantNon, 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 #50473jmroyer
Invité(encore) merci de ton aide et de tes explications, j’apprends au fur et à mesure :extra:
22 janvier 2010 à 18:02 #50474alex
ParticipantNous 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 {
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 {
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 #50475alex
ParticipantVous 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 #50476Merlin
Maître des clés:bravo:
12 août 2010 à 15:02 #50477pepitos137
MembreBonjour à 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 #50478Merlin
Maî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 #50479pepitos137
MembreJ’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 #50480Merlin
Maître des clésalex est actuellement en vacances, patience donc…
😎12 août 2010 à 15:43 #50481pepitos137
MembreMerci à 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 #50482alex
ParticipantJ’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.
-
AuteurRéponses
- Vous devez être connecté pour répondre à ce sujet.