Skip to main content
Inspiring
June 8, 2019
Answered

Two or more dependent lists by one main list

  • June 8, 2019
  • 3 replies
  • 735 views

Hi, this is my problem. In my pdf document, I want a main dropdown list "mainList" and a dependent dropdown list "depList1". When I choose the value in "mainList", the values in "depList1" change. In "mainList" I use this script, with three values "0", "1" and "2" that show different choices in "depList1", with the relative values:

var dependentListBoxFieldName = "depList2";

var dependentListValues =

{

"0": [

[" ", "0"]

],

"1": [

[" ", "0"]

["white", "1"],

["green", "2"],

["red", "3"],

],

"2": [

[" ", "0"]

["white", "1"],

["blue", "2"],

["yellow", "3"],

};

if ((event.target.type == "combobox" && event.name == "Format") || (event.target.type == "listbox" && event.name == "Keystroke")) {

if (event.target.type == "combobox") {

if (dependentListValues.hasOwnProperty(event.target.value)) {

this.getField(dependentListBoxFieldName).setItems(dependentListValues[event.target.value]);

}

else {

this.getField(dependentListBoxFieldName).clearItems();

}

}

if (event.target.type == "listbox" && dependentListValues.hasOwnProperty(event.changeEx)) {

this.getField(dependentListBoxFieldName).setItems(dependentListValues[event.changeEx]);

}

}

else {

app.alert("This script was not intended for this field type or event.");

So, I want a second dropdown list "depList2" that changes its values together "depList1", when I change the choose in "mainList". In other words, I want two or more dependent dropdown lists all dependent by only one main list. Can I use the same script? Can I use another script? Thank you so much

This topic has been closed for replies.
Correct answer robertop85194415

Ok, now it works. I renamed the vars with numbers (1,2,3..). but I also repeat all the final string with the new names of vars, one string for every dependent list. Maybe it's a overflowing script but it works. This is the final script:

var dependentListBoxFieldName1 = "depList1";

var dependentListValues1 =

{

"1": [

["Choice 1.1", "1"],

],

"2": [

["Choice 1.2", "2"],

]

};

var dependentListBoxFieldName2 = "depList2";

var dependentListValues2 =

{

"1": [

["Choice 2.1", "1"],

],

"2": [

["Choice 2.2", "2"],

]

};

if ((event.target.type == "combobox" && event.name == "Format") || (event.target.type == "listbox" && event.name == "Keystroke")) {

if (event.target.type == "combobox") {

if (dependentListValues1.hasOwnProperty(event.target.value)) {

this.getField(dependentListBoxFieldName1).setItems(dependentListValues1[event.target.value]);

}

else {

this.getField(dependentListBoxFieldName1).clearItems();

}

}

if (event.target.type == "listbox" && dependentListValues1.hasOwnProperty(event.changeEx)) {

this.getField(dependentListBoxFieldName1).setItems(dependentListValues1[event.changeEx]);

}

}

else {

app.alert("This script was not intended for this field type or event.");

}

if ((event.target.type == "combobox" && event.name == "Format") || (event.target.type == "listbox" && event.name == "Keystroke")) {

if (event.target.type == "combobox") {

if (dependentListValues2.hasOwnProperty(event.target.value)) {

this.getField(dependentListBoxFieldName2).setItems(dependentListValues2[event.target.value]);

}

else {

this.getField(dependentListBoxFieldName2).clearItems();

}

}

if (event.target.type == "listbox" && dependentListValues2.hasOwnProperty(event.changeEx)) {

this.getField(dependentListBoxFieldName2).setItems(dependentListValues2[event.changeEx]);

}

}

else {

app.alert("This script was not intended for this field type or event.");

}

3 replies

robertop85194415AuthorCorrect answer
Inspiring
June 8, 2019

Ok, now it works. I renamed the vars with numbers (1,2,3..). but I also repeat all the final string with the new names of vars, one string for every dependent list. Maybe it's a overflowing script but it works. This is the final script:

var dependentListBoxFieldName1 = "depList1";

var dependentListValues1 =

{

"1": [

["Choice 1.1", "1"],

],

"2": [

["Choice 1.2", "2"],

]

};

var dependentListBoxFieldName2 = "depList2";

var dependentListValues2 =

{

"1": [

["Choice 2.1", "1"],

],

"2": [

["Choice 2.2", "2"],

]

};

if ((event.target.type == "combobox" && event.name == "Format") || (event.target.type == "listbox" && event.name == "Keystroke")) {

if (event.target.type == "combobox") {

if (dependentListValues1.hasOwnProperty(event.target.value)) {

this.getField(dependentListBoxFieldName1).setItems(dependentListValues1[event.target.value]);

}

else {

this.getField(dependentListBoxFieldName1).clearItems();

}

}

if (event.target.type == "listbox" && dependentListValues1.hasOwnProperty(event.changeEx)) {

this.getField(dependentListBoxFieldName1).setItems(dependentListValues1[event.changeEx]);

}

}

else {

app.alert("This script was not intended for this field type or event.");

}

if ((event.target.type == "combobox" && event.name == "Format") || (event.target.type == "listbox" && event.name == "Keystroke")) {

if (event.target.type == "combobox") {

if (dependentListValues2.hasOwnProperty(event.target.value)) {

this.getField(dependentListBoxFieldName2).setItems(dependentListValues2[event.target.value]);

}

else {

this.getField(dependentListBoxFieldName2).clearItems();

}

}

if (event.target.type == "listbox" && dependentListValues2.hasOwnProperty(event.changeEx)) {

this.getField(dependentListBoxFieldName2).setItems(dependentListValues2[event.changeEx]);

}

}

else {

app.alert("This script was not intended for this field type or event.");

}

Thom Parker
Community Expert
Community Expert
June 8, 2019

Where is this script called? 

These lines are completely unnecessary because you already know the event where the script is called and the type of field where it is used.

if ((event.target.type == "combobox" && event.name == "Format") || (event.target.type == "listbox" && event.name == "Keystroke")) {

if (event.target.type == "combobox") {

if (dependentListValues.hasOwnProperty(event.target.value)) {

If this script is used in a format event, or keystroke, then the correct value of the field is "event.value" not "event.target.value"

Read this article. It provides the information you need.

https://acrobatusers.com/tutorials/js_list_combo_livecycle

Thom Parker - Software Developer at PDFScriptingUse the Acrobat JavaScript Reference early and often
Bernd Alheit
Community Expert
Community Expert
June 8, 2019

The code comes from here:

Dependent Lists

Bernd Alheit
Community Expert
Community Expert
June 8, 2019

You can use

dependentListBoxFieldName1

dependentListValues1

dependentListBoxFieldName2

dependentListValues2

dependentListBoxFieldName3

dependentListValues3

and so on

Copy the code and adjust the code.

Inspiring
June 8, 2019

I also thought that this is the simplest solution but it doesn't work, I don't know why