【问题标题】:Adobe Acrobat Pro DC custom calculation script adviceAdobe Acrobat Pro DC 自定义计算脚本建议
【发布时间】:2017-10-09 21:25:29
【问题描述】:

我正在尝试创建一个表单:

  1. 要计算的一系列分子和分母
  2. 如果该字段留空,则不包括在计算中
  3. 计算要实时更新,不用等到每个字段都有数字才计算。

这是表单中唯一的计算,因此不使用更改计算顺序。在文档javascript中,我有

this.calculateNow();

在字段的自定义计算脚本中,我有

(function () { 

var v1 = +getField("Text1").value;
var v2 = +getField("Text2").value;
var v3 = +getField("Text3").value;
var v4 = +getField("Text4").value;
var v5 = +getField("Text5").value;
var v6 = +getField("Text6").value;
var v7 = +getField("Text7").value;
var v8 = +getField("Text8").value;
var v9 = +getField("Text9").value;
var v10 = +getField("Text10").value;

event.value = (v2 * v4 * v6 * v8 * v10) !== 0 ? ((v1 * v3 * v5 * v7 * v9) / (v2 * v4 * v6 * v8 * v10)) : "";
})();

我遇到的问题:

  1. 计算不是实时计算的
  2. 仍然必须输入所有字段才能进行计算。
  3. 如果输入零,则不会运行计算。

【问题讨论】:

  • 0?:"" 应该怎么做??为什么不只是""
  • 我希望如果任何分母字段为空白或 0,则这些字段不会包含在计算中。我会按照您的建议尝试,同时减少重复代码!

标签: javascript forms adobe acrobat adobe-javascript


【解决方案1】:

您的代码有点重复。您可以使用包含字段 id 的数组:

const fields = Array.from({length:10}, (_,i)=>"Text"+(i+1));

然后我们可以将字段映射到它们的值并使用 or 运算符来填充未设置的字段:

const values = fields.map( f => +getField(f).value || 1 );

然后该数组可以减少到某个值,例如乘法:

const result = values.reduce((a,b) => a*b)

【讨论】:

  • 此代码是否经过验证,如果是,使用了哪些 Acrobat 版本?
  • @max 不,我不知道
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-03
  • 1970-01-01
相关资源
最近更新 更多