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

时间:2016-01-26 14:02:44

标签: javascript pdf adobe acrobat

当我在其他字段中插入文本/数字时,我的表单中有两个字段会发生变化,为什么?它们没有连接,例如,如果我在请求的字段中写下我的全名(参见截图),它会更改两个字段“Fratrukket Rabatt(折扣价格)”和“总价格(总价格)”。

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; 

总价格(总价):计算总价减去折扣

// 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;  

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

enter image description here

1 个答案:

答案 0 :(得分:0)

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

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

然而,现在,逻辑本身存在相当多的混乱,并且几乎没有机会获得可靠的结果。

首先,将(计算链)的所有计算合并到一个单独的脚本中,并将其附加到计算链的最后一个结果字段,或者一个不可见的只读字段,被认为是最佳实践。否则不参与任何事情(现场事件序列是其起作用的原因)。

根据示例可以得出的结论,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中的自动字段识别非常方便。但是,生成的字段名称不是很有用,并且(更重要的是)它会阻止用户对表单进行严格的分析,从而导致逻辑错误。