除非选择了字段,否则脚本会更改文本字段颜色,但不会显示

时间:2017-05-14 02:07:19

标签: javascript acrobat

我制作了这个PDF计算器,以显示超过/低于25%的时间。该脚本有点工作,除非我选择你不知道它正在工作的新的开放字段,并且一旦你选择另一个字段它恢复到acrobat标准文本字段颜色,想法是新的开放字段保持绿色或红色,因为表单得到只有在重置时才填写它应该恢复正常颜色。

有人可以帮帮我,我在这里错过了什么?

谢谢。

calculator

var v1 = this.getField("newOpening").value;
var v2 = this.getField("calculatedTotal").value;

if (v1 < v2) {
   bg = color.green;
} else if (v1 > v2) {
   bg = color.red; 
} 

event.target.fillColor = bg;

1 个答案:

答案 0 :(得分:0)

代码实际上应该有效。但是,它有一些问题。

第一个问题是变量bg没有明确定义。它在原始脚本中出现的方式意味着它是一个全局变量,可以从文档中以任何方式访问和修改它。更好地明确定义它。

另一个问题是计算序列没有提到的触发器。因此,您需要一个活动元素(实质上是一个按钮,但链接或页面事件也会这样做),或者您需要一些启动字段事件序列的字段事件。

简单地说,如果您在文档的任何字段中输入值,则会进行计算,然后如果分配给计算操作,脚本将被执行。

有一件事你需要考虑。在脚本中,区分v1小于v2,v1大于v2。如果两个值相等,会发生什么?您还可以确保实际将字段中的值视为数字。最简单的方法是将其格式设置为Number。否则,您可以将它们的值乘以1。

您的代码的略微修改版本将如下所示(假设两个值相同(也在表单的默认状态下),背景将为白色):

var v1 = this.getField("newOpening") ;
var v2 = this.getField("calculatedTotal") ;
var bg = color.white ;

if (v1.value*1 < v2.value*1) {
   bg = color.green;
} else {
   if (v1.value*1 > v2.value*1) {
      bg = color.red; 
   } 
}

event.target.fillColor = bg;

应该这样做。如果仍然遇到问题,可以考虑使用明确的颜色定义数组作为颜色,如

["RGB", 1, 0, 0]

color.red ["RGB", 0, 1, 0]

color.green ["RGB", 1, 1, 1]

color.white