• Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
    Dedicated community for Japanese speakers
  • 한국 커뮤니티
    Dedicated community for Korean speakers
Exit
0

Need Custom Text In Dropdown to equal zero

Community Beginner ,
Nov 30, 2019 Nov 30, 2019

Copy link to clipboard

Copied

In short, I want to assign a value of zero to a dropdown field if the user does not choose an item from the list and enters custom text.

 

I have a form with multiple fields.  The form calculates the Wheel Tax based on input from three fields. "Wheel Tax Cities" and "Wheel Tax Counties" are both dropdowns that have items with Export Values and allow user to enter custom text.  A third field is called "License Plate Fee Dropdown."  One of the fields called "Wheel Tax" I have a custom calculation script that sort of works but only calculated sporadically:

 

var t1 = getField("Wheel Tax Cities").value;
var t2 = getField("Wheel Tax Counties").value;
var PlateTransfer = getField("License Plate Fee Dropdown").value;
if (PlateTransfer < 1) event.value = 0;
else if (isNaN(t1)) t1 = 0;
else if (isNaN(t2)) t2 = 0;
else event.value = t1+t2;

 

Wheel Tax = Wheel Tax Cities + Wheel Tax Counties but is zero when there is a PlateTransfer.  

 

Thanks for your time, and one last thing, is there a good reference book to buy to help me learn Acrobat Javascript?  Thanks!!

TOPICS
Acrobat SDK and JavaScript

Views

734

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines

correct answers 2 Correct answers

Community Expert , Dec 01, 2019 Dec 01, 2019

Try this:

 

var t1 = Number(this.getField("Wheel Tax Cities").valueAsString);
var t2 = Number(this.getField("Wheel Tax Counties").valueAsString);
var PlateTransfer = Number(this.getField("License Plate Fee Dropdown").valueAsString);
if (PlateTransfer < 1 || isNaN(t1) || isNaN(t2)) event.value = 0;
else event.value = t1+t2;

Votes

Translate

Translate
Community Expert , Dec 01, 2019 Dec 01, 2019

You didn't cover the scenario when both values are not numbers.

You can do that by replacing these lines:

else if (isNaN(t1)) event.value = t2;
else if (isNaN(t2)) event.value = t1;

With this:

else if (isNaN(t1) && isNaN(t2)) event.value = 0;

else if (isNaN(t1) && !isNaN(t2)) event.value = t2;
else if (!isNaN(t1) && isNaN(t2)) event.value = t1;

 

Edit: fixed wrong spelling of isNaN in some instances...

Votes

Translate

Translate
Community Expert ,
Dec 01, 2019 Dec 01, 2019

Copy link to clipboard

Copied

Do you want it to show zero if any of the fields have a custom value? Because that's not what you're doing in the code above.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Dec 01, 2019 Dec 01, 2019

Copy link to clipboard

Copied

Only Wheel Tax Cites and Wheel Tax Counties allow for custom value.  If either has a custom value then that one should read as zero.

 

When I select a city from the selection list in Wheel Tax Cities dropdown or select a city from the selection list in Wheel Tax Counties I need Wheel Tax to sum the two.

 

When I manually enter a city (custom value) in Wheel Tax Cities dropdown I need it to read as zero.  Same for Counties.

 

If there is a plate transfer then there is no Wheel Tax and that field should then disregard any fees from either Cities or Counties and the calculation should be zero.

 

My License Plate Fee Dropdown looks like this:

2019-12-01_10-35-37.jpg

 

My Wheel Tax Cities dropdown looks like this:

2019-12-01_10-39-02.jpg

 

 

 

Wheel Tax looks like this:

 

2019-12-01_10-57-05.jpg

 

 

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Dec 01, 2019 Dec 01, 2019

Copy link to clipboard

Copied

Try this:

 

var t1 = Number(this.getField("Wheel Tax Cities").valueAsString);
var t2 = Number(this.getField("Wheel Tax Counties").valueAsString);
var PlateTransfer = Number(this.getField("License Plate Fee Dropdown").valueAsString);
if (PlateTransfer < 1 || isNaN(t1) || isNaN(t2)) event.value = 0;
else event.value = t1+t2;

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Dec 01, 2019 Dec 01, 2019

Copy link to clipboard

Copied

Wow, I'm getting closer.  I wasn't being clear with my precise need, sorry. If there is a plate transfer then Wheel Tax =0.  If not, then use the event value of Cities AND Counties.  If there is a custom value entered for Cites then return 0 for Cities but still use the value from Counties.  And visa versa.  If both Cities AND Counties are a custom value then Wheel Tax=0.

 

 

He're is what almost worked, but when I enter a custom value for BOTH Cites AND Counties I get "NaN":

 

var t1 = Number(this.getField("Wheel Tax Cities").valueAsString);
var t2 = Number(this.getField("Wheel Tax Counties").valueAsString);
var PlateTransfer = Number(this.getField("License Plate Fee Dropdown").valueAsString);
if (PlateTransfer < 1) event.value = 0;
else if (isNaN(t1)) event.value = t2;
else if (isNaN(t2)) event.value = t1;
else event.value = t1+t2;

 

I've never used the

 

Number(xxxxxxx).valueAsString)

 

I now see how to use it.   "Number(value)" constrictor will (i think) convert a number character string to a floating point number and force JavaScript to perform addition and not concatenation.

Thanks!! 

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Dec 01, 2019 Dec 01, 2019

Copy link to clipboard

Copied

Yes, that's correct. It will try to convert the value (whatever type it might be) to a Number. If it fails, the result will be NaN, which you can detect using the isNaN method.

Glad to hear you got it working!

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Dec 01, 2019 Dec 01, 2019

Copy link to clipboard

Copied

Sorry I didn't think you would reply to quickly. My new script is off just a little and I need just a little more help please.  See above.  I just edited it after I tested my form.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Dec 01, 2019 Dec 01, 2019

Copy link to clipboard

Copied

You didn't cover the scenario when both values are not numbers.

You can do that by replacing these lines:

else if (isNaN(t1)) event.value = t2;
else if (isNaN(t2)) event.value = t1;

With this:

else if (isNaN(t1) && isNaN(t2)) event.value = 0;

else if (isNaN(t1) && !isNaN(t2)) event.value = t2;
else if (!isNaN(t1) && isNaN(t2)) event.value = t1;

 

Edit: fixed wrong spelling of isNaN in some instances...

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Dec 01, 2019 Dec 01, 2019

Copy link to clipboard

Copied

I replaced script with:

var t1 = Number(this.getField("Wheel Tax Cities").valueAsString);
var t2 = Number(this.getField("Wheel Tax Counties").valueAsString);
var PlateTransfer = Number(this.getField("License Plate Fee Dropdown").valueAsString);
if (PlateTransfer < 1) event.value = 0;
else if (isNan(t1) && isNaN(t2)) event.value = 0;
else if (isNan(t1) && !isNaN(t2)) event.value = t2;
else if (!isNan(t1) && isNaN(t2)) event.value = t1;
else event.value = t1+t2;

 

 

and now my javascript debugger is yelling at me.  It says:


undefined
TypeError: this.getField(...) is null
4:Field:Calculate
TypeError: this.getField(...) is null
4:Field:Calculate
TypeError: this.getField(...) is null
4:Field:Calculate
TypeError: this.getField(...) is null
4:Field:Calculate
TypeError: this.getField(...) is null
4:Field:Calculate
SyntaxError: syntax error
5:
SyntaxError: syntax error
5:
SyntaxError: syntax error
5:
TypeError: t1.map is not a function
4:Field:Calculate
TypeError: t1.map is not a function
4:Field:Calculate
TypeError: t1.map is not a function
4:Field:Calculate
TypeError: t1.map is not a function
4:Field:Calculate
undefined
SyntaxError: missing ( after for
4:
SyntaxError: missing ( after for
4:
ReferenceError: isNan is not defined
5:Field:Calculate
ReferenceError: isNan is not defined
5:Field:Calculate
ReferenceError: isNan is not defined
5:Field:Calculate

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Dec 01, 2019 Dec 01, 2019

Copy link to clipboard

Copied

LATEST

Disregard, I found it.  My bad I should have double checked.  Lower case N messed it up.Thanks again I can't tell you how much I appreciate the help and how much I've learned:

 

var t1 = Number(this.getField("Wheel Tax Cities").valueAsString);
var t2 = Number(this.getField("Wheel Tax Counties").valueAsString);
var PlateTransfer = Number(this.getField("License Plate Fee Dropdown").valueAsString);
if (PlateTransfer < 1) event.value = 0;
else if (isNaN(t1) && isNaN(t2)) event.value = 0;
else if (isNaN(t1) && !isNaN(t2)) event.value = t2;
else if (!isNaN(t1) && isNaN(t2)) event.value = t1;
else event.value = t1+t2;

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines