更改一个字段会导致其他前缀字段发生更改 - Adob​​e Acrobat Standard DC

Changing one field causes other prefixed fields to change - Adobe Acrobat Standard DC

当我在其他字段中插入 text/number 时,我的表单中有两个字段会发生变化,为什么?它们没有关联,例如,如果我在请求的字段中写下我的全名(参考截取的屏幕截图),它会更改两个字段 "Fratrukket Rabatt (Discount price)" 和 "Total pris (total price)"。

Fratrukket Rabatt(折扣价):计算总折扣

// Get first value as number 
var v1 = +getField("Rabatt i prosent").value;

// Get second value as number 
var v2 = +getField("Total pris").value;

// Calculate the result
event.value = (v1 / 100) * v2; 

Total pris(总价):计算总价减去折扣

// Get first value as number 
var viva1 = +getField("Pris per dekk").value;

// Get second value as number 
var viva2 = +getField("Antall dekk").value;

// Get third value as number 
var viva3 = +getField("Pris på arbeid").value;

// Get fourth value as number 
var viva4 = +getField("Fratrukket Rabatt").value;

// Calculate the result
event.value = ((viva1 * viva2) + viva3) - viva4;  

这是一个常见问题吗,请帮忙。

这是绝对正确的行为,你遇到了。

查看 Acrobat JavaScript 文档(Acrobat SDK 文档的一部分,可从 Adob​​e 网站下载),其中有字段事件序列的说明和图表。与我们的问题相关的是,Calculate 事件是该序列的一部分,每当更改字段值时,都会执行完整的 Calculation 序列。因此,如果您有一些默认值,并且使用它们进行了一些计算,则会重新计算计算的字段值。

然而,现在逻辑本身有点混乱,开始时几乎没有机会获得可靠的结果。

首先,将(计算链的)所有计算合并到一个脚本中被认为是最佳实践,并将其附加到计算链的最后一个结果字段,或者一个不可见的,read-only 字段,否则不涉及任何内容(字段事件序列是它起作用的原因)。

根据从示例中得出的结论,您在 Total Pris 字段中的脚本可能如下所示:

注意,其实这个计算有逻辑上的漏洞,因为折扣依赖的是总计,是在计算出折扣后计算出来的。

var deckprice = this.getField("Pris per dekk").value * this.getField("Antall dekk").value ;
var subtotal = deckprice + this.getField("Pris på arbeid").value*1 ;
var discount = subtotal * this.getField("Rabatt i prosent").value / 100 ;
var grandtotal = subtotal - discount ;

this.getField("Fratrukket Rabatt").value = discount ;
event.value = grandtotal ;

这样就可以了。

如果您在独立字段中使用此计算(而不是在 "Total Pris" 字段中),您需要将最后一行更改为

this.getField("Total Pris").value = grandtotal ;

计算到此为止。

另一个建议(好吧,这有点让我讨厌......):我知道Acrobat中的自动字段识别非常方便。但是,生成的字段名称不是很有用,而且(更重要的是)它会阻止用户对表单进行认真的分析,从而导致逻辑错误。