Skip to main content
Participating Frequently
November 18, 2020
Answered

Trying to change text color and fill color simutaneously - Help Please!

  • November 18, 2020
  • 2 replies
  • 1996 views

Hello Friends,

 

I am trying to write a script that will change a fill color based on a calculated field's event value, but I am having trouble getting the effected field to change both colors. This is the script I currently have that will not work;

 

if (Number(event.value)>1)
app.alert("Total Beneficiary Allocation exceeds 100%");
if(event.value == 0)
event.target.fillColor = color.white;
else if(event.value < 1)
event.target.fillColor = color.yellow;
else if(event.value > 1)
event.target.fillColor = color.red && event.target.textColor = color.white;
else
event.target.fillColor = color.green;

 

The script works perfectly fine when I remove "&& event.target.textColor = color.white", but gives me "invalid assignment" when entered. All help would be greatly appreciated!

 

Thank you,

Eric

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

Its a matter of using the correct "if" block syntax.

 

if(event.value == 0)
{
    event.target.fillColor = color.white;
    event.target.textColor = color.black;
}
else if(event.value < 1)
{
    event.target.fillColor = color.yellow;
    event.target.textColor = color.black;
}
else if(event.value > 1)
{
    app.alert("Total Beneficiary Allocation exceeds 100%");
    event.target.fillColor = color.red;
    event.target.textColor = color.white;
}
else
{
    event.target.fillColor = color.green;
    event.target.textColor = color.black;
}

 

 

Notice how the code for each if statement is enclosed in curly brackets. And both colors are set in every block. 

You can read more about using "if" statements here:

https://acrobatusers.com/tutorials/conditional-execution/

 

2 replies

Thom Parker
Community Expert
Thom ParkerCommunity ExpertCorrect answer
Community Expert
November 18, 2020

Its a matter of using the correct "if" block syntax.

 

if(event.value == 0)
{
    event.target.fillColor = color.white;
    event.target.textColor = color.black;
}
else if(event.value < 1)
{
    event.target.fillColor = color.yellow;
    event.target.textColor = color.black;
}
else if(event.value > 1)
{
    app.alert("Total Beneficiary Allocation exceeds 100%");
    event.target.fillColor = color.red;
    event.target.textColor = color.white;
}
else
{
    event.target.fillColor = color.green;
    event.target.textColor = color.black;
}

 

 

Notice how the code for each if statement is enclosed in curly brackets. And both colors are set in every block. 

You can read more about using "if" statements here:

https://acrobatusers.com/tutorials/conditional-execution/

 

Thom Parker - Software Developer at PDFScriptingUse the Acrobat JavaScript Reference early and often
Eric5C58Author
Participating Frequently
November 18, 2020

Works perfectly! Thank you for your help and wisdom!

Thom Parker
Community Expert
Community Expert
November 18, 2020

BTW:

Your original code will work with a small adjustment. The reported error is caused by an order of execution issue, i.e. an operator precedence issue. 

The "&&" on the left side evaluates before the "=", so the assignment is to a static value, not the "textColor" property. 

 

But this code change will work because the parenthese force the order of execution.

(event.target.fillColor = color.red) && (event.target.textColor = color.white);

 

Thom Parker - Software Developer at PDFScriptingUse the Acrobat JavaScript Reference early and often
Nesa Nurani
Community Expert
Community Expert
November 18, 2020

Try like this:

if (Number(event.value)>1)
app.alert("Total Beneficiary Allocation exceeds 100%");
if(event.value == 0){
event.target.fillColor = color.white;}
else if(event.value < 1){
event.target.fillColor = color.yellow;}
else if(event.value > 1){
event.target.fillColor = color.red;
event.target.textColor = color.white;}
else
event.target.fillColor = color.green;