Skip to main content
PDF Automation Station
Community Expert
Community Expert
January 23, 2018
Answered

Dialog Popup List

  • January 23, 2018
  • 1 reply
  • 2240 views

How do you change the items in a dialog popup based on the selection of another dialog popup?

This topic has been closed for replies.
Correct answer Thom Parker

"pop1": function(dialog)

{

Rslts=dialog.store();

app.alert(Rslts["pop1"]);

},

When I use the code above, the alert says "[object Aggregate]".  What am I doing wrong?


"[object Aggregate]" is the type of animal that is being displayed, i.e. it is the result of turning the list object into a string.  If you want to see selected value then you need a script to search the list object for the selected value. Fortunately, such code is provided by AcroDialogs.

These two lines right here, which is from the commit function, returns the selected value.

var path = new Array();

this.strpop1 = ((this.GetListSel(oRslt["pop1"],path))?path.reverse():[""])[0];

BTW: the new AcroDialogs online tool has a better function designed just for regular list elements. This one is intended to work for tree lists.

1 reply

Thom Parker
Community Expert
Community Expert
January 23, 2018

Hi David,

   First, thanks for being a member of www.pdfscripting.com  for such a long time, many years now.

DropDown lists in an Acrobat JS dialog are loaded with the "dialog.load()" function.  The easiest way to see how this is done is to just create a dialog with a dropdown list in ACRODIALOGS OVERVIEW .  In the script created by AcroDialogs the list is defined at the top of the code, and then loaded in the "initialize" function.  But a new list can be loaded at any time, from any function in the Dialog definition object. All you need to do is to create a new list object and then load with "dialog.load". In your case you'll need to define a function for the droplist that changes the other droplist. To do this, create a new entry in the dialog definition object with the same name as the element. This function will be called every time the user makes a dropdown selection.

Thom Parker - Software Developer at PDFScriptingUse the Acrobat JavaScript Reference early and often
PDF Automation Station
Community Expert
Community Expert
January 23, 2018

Hi Thom,  I'm still using the desktop plug-in of Acrodialogs.  I created additional lists at the top and figured how to load pop2 when pop1 changes, but how do I load pop2 based on pop1?  Appreciate your help.  Here's my script:

var listpop3 =

{

"A--1": -1,

"A--2": -1,

"A--3": -1,

"A--4": -1,

"A--5": -1,

};

var listpop4 =

{

"B1": -1,

"B2": -1,

"B3": -1,

"B4": -1,

"B5": -1,

};

var InvoiceStampsDig =

{

result:"cancel",

DoDialog: function(){return app.execDialog(this);},

strpop1:"",

strpop2:"",

SetListSel:function(list,path){if(path.length == 0) return;

eval("list[\""+ ((typeof path.join != "function")?path:path.join("\"][\"")) + "\"] = 1")},

GetListSel:function(oLstRslts,path){

   for(var item in oLstRslts){

      if( ((typeof oLstRslts[item]=="number")&&(oLstRslts[item]>0))

         || this.GetListSel(oLstRslts[item],path) )

       {path.push(item);return true;}

   }

   return false;

},

initialize: function(dialog)

{

var listpop1 =

{

"Header1": -1,

"Header2": -1,

"Header3": -1,

"Header4": -1,

"Header5": -1,

};

this.SetListSel(listpop1, this.strpop1);

var listpop2 =

{

"A1": -1,

"A2": -1,

"A3": -1,

};

this.SetListSel(listpop2, this.strpop2);

var dlgInit =

{

"pop1": listpop1,

"pop2": listpop2,

};

dialog.load(dlgInit);

},

commit: function(dialog)

{

var oRslt = dialog.store();

var path = new Array();

this.strpop1 = (this.GetListSel(oRslt["pop1"],path))?path.reverse():"";

var path = new Array();

this.strpop2 = (this.GetListSel(oRslt["pop2"],path))?path.reverse():"";

},

"pop1": function(dialog)

{

dialog.load({pop2:listpop3});

},

description:

{

name: "Invoice Stamps",

elements:

[

{

type: "view",

elements:

[

{

type: "cluster",

item_id: "cls1",

char_width: 8,

char_height: 8,

font: "dialog",

bold: true,

elements:

[

{

type: "popup",

item_id: "pop1",

width: 118,

height: 23,

char_width: 8,

},

{

type: "popup",

item_id: "pop2",

width: 117,

height: 23,

char_width: 8,

},

{

type: "view",

width: 72,

height: 27,

char_width: 8,

char_height: 8,

alignment: "align_center",

elements:

[

{

type: "ok_cancel",

font: "dialog",

bold: true,

ok_name: "OK",

cancel_name: "CANCEL",

},

]

},

]

},

]

},

]

}

};

// Example Code

InvoiceStampsDig.strpop1 = "";

InvoiceStampsDig.strpop2 = "";

if("ok" == InvoiceStampsDig.DoDialog())

{

console.println("pop1:" + InvoiceStampsDig.strpop1);

console.println("pop2:" + InvoiceStampsDig.strpop2);

}

Thom Parker
Community Expert
Community Expert
January 23, 2018

I'm not sure I understand the issue. You do it the same way as the other dropdown. Just make a function for pop2.

Thom Parker - Software Developer at PDFScriptingUse the Acrobat JavaScript Reference early and often