当我在其他字段中插入文本/数字时,我的表单中有两个字段会发生变化,为什么?它们没有连接,例如,如果我在请求的字段中写下我的全名(参见截图),它会更改两个字段“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;
这是一个常见问题,请帮忙。
答案 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中的自动字段识别非常方便。但是,生成的字段名称不是很有用,并且(更重要的是)它会阻止用户对表单进行严格的分析,从而导致逻辑错误。