Copy link to clipboard
Copied
Here's a stumper for you.
I have been trying to create a form which can have certain fields resize to handle additional input. There are 3 different fields that can be resized by the user and then the form spawns or deletes pages to show the fields at the sizes the people have chosen. In all, there are 27 different field combinations. In order to accomodate this, I have been trying to use nested if statements. The options are simply "Small Size", "Medium Size", and "Large Size" for each field. The problem I'm running into is that the beginning option when the form loads is "Small Size" and the page shows the appropriate size field. When I choose "Medium" though, "Small" stays. Then when I choose "Large", "Medium" shows up. Then when I choose "Small" or "Medium", "Large" will show all with the proper accompanying pages. The form is showing the fields and pages of the last option that was chosen when you click the next option. Gosh this sounds insane and I hope it's not too confusing. I have other less complicated dropdowns to show or hide fields/pages and this is the only one that won't work.
Here is the partial nested if-thens that I used.
var Drop1 = this.getField("Drop.01").value;
var Drop2 = this.getField("Drop.02").value;
var Drop3 = this.getField("Drop.03").value
if( event.value == "Drop.01" ) {
this.getField("1K.").display = display.visible; } \\ this seemed unnecessary before, so I took it out once. No Difference.
else if( Drop1 == "Small Size" ) {
if( Drop2 == "Small Size" && Drop3 == "Small Size" ) {
var expTplt1 = getTemplate("1K1-2");
expTplt1.spawn(numPages,false,false);
var expTplt2 = getTemplate("1K1-3");
expTplt2.spawn(numPages,false,false);
var expTplt3 = getTemplate("1K1-4");
expTplt3.spawn(numPages,false,false);
this.pageNum = 1;}
else if( Drop2 == "Medium Size" && Drop3 == "Small Size" ) {
var expTplt1 = getTemplate("1K2-2");
expTplt1.spawn(numPages,false,false); \\...
\\ ... additional options
}
else if( Drop1 == "Medium Size" ) {
if( Drop2 == "Small Size" && Drop3 == "Small Size" ) {
var expTplt1 = getTemplate("1K4-2");
expTplt1.spawn(numPages,false,false);
var expTplt2 = getTemplate("1K4-3");
expTplt2.spawn(numPages,false,false);
var expTplt3 = getTemplate("1K4-4");
expTplt3.spawn(numPages,false,false);
this.pageNum = 1;}
\\ ... additional options
}
else if( Drop1 == "Large Size" ) {
if( Drop2 == "Small Size" && Drop3 == "Small Size" ) {
var expTplt1 = getTemplate("1K7-2");
expTplt1.spawn(numPages,false,false);
var expTplt2 = getTemplate("1K7-3");
expTplt2.spawn(numPages,false,false);
var expTplt3 = getTemplate("1K7-4");
expTplt3.spawn(numPages,false,false);
var expTplt4 = getTemplate("1K7-5");
expTplt4.spawn(numPages,false,false);
this.pageNum = 1;}
\\ ... additional options
}
else { this.getField("1K.").display = display.visible; }
Hopefully you get the idea. There's probably a way easier way to do this, but I can't think of what it is at this point. I've been working on this for several days now. Help please!!!
So I figured it out and I will place a sample below. My problem was that I made the incorrect assumption that I could only have each event.value option once in the code (so I could only use the options of small, medium and large once each). After I figured that was wrong, all I had to do was place the other conditions. Hope that makes sense. There is probably a more efficient way to do this, but I could get this one to work, so I'm happy.
if (event.value == "Drop.01") {
this.getField("1K.").disp
...Copy link to clipboard
Copied
Where does you use the script?
Copy link to clipboard
Copied
I'm not 100% sure what you mean, but i think you mean that you want to know which property field I am using... I hope.
As with my other javascript fields, I am using the "validate" dropdown property and NOT the "calculate" property.
Does that answer your question?
Copy link to clipboard
Copied
At validation you will get the value of the dropdown with:
event.value
Copy link to clipboard
Copied
I know event.value is what you're supposed to use, but how do you mesh an event.value with the code that is spawning pages? This is not a numerical calculation so i couldn't find a way to use event.value. Can you give an example?
Copy link to clipboard
Copied
That has nothing to do with it. event.value can be a number, or a string, etc. But you must use it in a Validation script to get the field's new value.
Copy link to clipboard
Copied
E.g.
if (event.value == "Small Size") {
...
}
Copy link to clipboard
Copied
Remove the period after "==" ...
Copy link to clipboard
Copied
I know that using event.value works in the case of one condition, but how would I apply event.value to a nested if statement with 3 conditions that have to be checked each time? I can't see how to make the variable an event.value and have it check the conditions each time.
Copy link to clipboard
Copied
At the first dropdown list replace
var Drop1 = this.getField("Drop.01").value;
with
var Drop1 = event.value;
Copy link to clipboard
Copied
How does the variable know which field to find it's event.value in? var Drop1 needs to check dropdown field "Drop.01" for it's value each time to see if the value has changed. I tried doing all three var as you suggested and it didn't work. It actually deleted the visible pages completely.
var Drop1 = event.value;
var Drop2 = event.value;
var Drop3 = event.value
I also tried the following and it, while it did better that the one above, still had the same problem I started with.
var Drop1 = (event.value = this.getField("Drop.01").value);
var Drop2 = (event.value = this.getField("Drop.02").value);
var Drop3 = (event.value = this.getField("Drop.03").value)
The following worked (this was my original one) and it didn't use the var, but it only allows me to use 3 of the page combinations and not all 27. Maybe you can see something different that I can use.
if (event.value == "Drop.01") {
this.getField("1K.").display = display.visible;
}
else if (event.value == "Small Size") {
this.getField("Drop.01").value == "Small Size" && this.getField("Drop.02").value == "Small Size" && this.getField("Drop.03").value == "Small Size"
var expTplt1 = getTemplate("1K1-2");
expTplt1.spawn(numPages,false,false);
var expTplt2 = getTemplate("1K1-3");
expTplt2.spawn(numPages,false,false);
var expTplt3 = getTemplate("1K1-4");
expTplt3.spawn(numPages,false,false);
this.pageNum = 1; }
else if (event.value == "Medium Size") {
this.getField("Drop.01").value == "Medium Size" && this.getField("Drop.02").value == "Small Size" && this.getField("Drop.03").value == "Small Size"
var expTplt1 = getTemplate("1K4-2");
expTplt1.spawn(numPages,false,false);
var expTplt2 = getTemplate("1K4-3");
expTplt2.spawn(numPages,false,false);
var expTplt3 = getTemplate("1K4-4");
expTplt3.spawn(numPages,false,false);
this.pageNum = 1; }
else if (event.value == "Large Size") {
this.getField("Drop.01").value == "Large Size" && this.getField("Drop.02").value == "Small Size" && this.getField("Drop.03").value == "Small Size"
var expTplt1 = getTemplate("1K7-2");
expTplt1.spawn(numPages,false,false);
var expTplt2 = getTemplate("1K7-3");
expTplt2.spawn(numPages,false,false);
var expTplt3 = getTemplate("1K7-4");
expTplt3.spawn(numPages,false,false);
var expTplt4 = getTemplate("1K7-5");
expTplt4.spawn(numPages,false,false);
this.pageNum = 1; }
else { this.getField("1K.").display = display.visible; }
Copy link to clipboard
Copied
Don't use
var Drop2 = event.value;
var Drop3 = event.value;
at dropdown list 1
Copy link to clipboard
Copied
You can reference event.value as many times as you wish in your code, or you can assign it to a variable and then use that, like this:
var v = event.value;
if (v=="abc") {
// do something
} else if (v=="xxx") {
// do something else
}
etc.
Copy link to clipboard
Copied
I'm not 100% sure what you mean, but i think you mean that you want to know which property field I am using... I hope.
As with my other javascript fields, I am using the "validate" dropdown property and NOT the "calculate" property.
Does that answer your question?
Copy link to clipboard
Copied
It's not if( event.value == "Drop.01" ) { it should be Drop1 not Drop.01
Copy link to clipboard
Copied
I'm sorry but that didn't make any difference to what I already had. The same exact thing happens.
Copy link to clipboard
Copied
So I figured it out and I will place a sample below. My problem was that I made the incorrect assumption that I could only have each event.value option once in the code (so I could only use the options of small, medium and large once each). After I figured that was wrong, all I had to do was place the other conditions. Hope that makes sense. There is probably a more efficient way to do this, but I could get this one to work, so I'm happy.
if (event.value == "Drop.01") {
this.getField("1K.").display = display.visible;
}
else if (event.value == "Small Size") {
(event.value == (this.getField("Drop.02").value == "Small Size")) && ((event.value == this.getField("Drop.03").value == "Small Size")); {
var expTplt1 = getTemplate("1K1-2");
expTplt1.spawn(numPages,false,false);
var expTplt2 = getTemplate("1K1-3");
expTplt2.spawn(numPages,false,false);
var expTplt3 = getTemplate("1K1-4");
expTplt3.spawn(numPages,false,false);
this.pageNum = 1; } }
else if (event.value == "Small Size") {
(event.value == (this.getField("Drop.02").value == "Small Size")) && ((event.value == this.getField("Drop.03").value == "Medium Size")); {
var expTplt1 = getTemplate("1K10-2");
expTplt1.spawn(numPages,false,false);
var expTplt2 = getTemplate("1K10-3");
expTplt2.spawn(numPages,false,false);
var expTplt3 = getTemplate("1K10-4");
expTplt3.spawn(numPages,false,false);
this.pageNum = 1; } }
// The rest of the conditions...