【问题标题】:Setting a field based on a ComboBox selection根据 ComboBox 选择设置字段
【发布时间】:2023-03-19 08:15:01
【问题描述】:

我不是 JavaScript 新手,但这是我第一次涉足 Acrobat 脚本。

我要做的是根据在组合框中选择的值更改文本字段。

由于我有许多具有相同选项集的不同组合框,以及许多应该绑定到它们的文本字段,因此我更喜欢可以为所有这些重用的文档范围函数。

我不确定这是否可能,但这就是我的想法......

检测组合框何时更改。在更改事件提交时,从中获取导出值并将其设为相关文本字段的值。

步骤如下:

  • 捕获组合框 onmouseup 事件
  • 检测哪个组合框触发了事件
  • 使用数组列表将组合框的名称与其关联的文本字段匹配
  • 使用 getField() 获取文本字段
  • 将文本字段值设置为组合框的导出值

对此的任何帮助将不胜感激。关于 Acrobat 事件触发器及其工作原理的特别好的资源。我浏览了大量 API 文档,但找不到任何内容。

【问题讨论】:

  • 如果你可以使用 jQuery,事情会很简单——你也可以吗?
  • 不。 Acrobat 脚本不是通常的 JavaScript。如果是,我就不会有这个问题。将其视为具有不同 DOM 的基本 JS 解释器(在 PDF 中实际上有 3 个不同的 DOM)。
  • 那么使用 document.getElementsByTagName 的纯 JavaScript 可以工作吗?
  • @Shadow 不,在 Acrobat 中它实际上是 this.getField("fieldName") 或 doc.getField("fieldName")。但是,这不是我要在这里解决的问题。我在问是否有办法从文档范围订阅字段事件。如果您查看 Acrobat 的 Javascript API,您会发现,虽然语言相同,但架构与标准 HTML DOM/JS 模型有很大不同。我正在寻找的是在 Acrobat 开发方面有经验的人,他可能能够回答这个问题。
  • 我明白了.. 认为它更接近“普通”JavaScript 抱歉。希望有人过来! :)

标签: javascript pdf scripting acrobat


【解决方案1】:

找到了!

经过数小时/数天的谷歌搜索,我终于找到了一个可行的解决方案。

处理函数需要绑定到'Keystroke'事件。

处理函数应包含:

if(!event.willCommit) {
  this.getField('[field]').value = event.change;
}

注意:其中 'field' 是正在更新的字段的名称,而 event.change 是在组合框中选择的值。

要获取选择的导出值,请使用以下命令:

if(!event.willCommit) {
  this.getField('[field]').value = event.changeEx;
}

显然,只要与 UI 元素交互,就会触发“Keystroke”。如果您不希望它在文档加载时执行,请务必在页面加载事件期间将处理函数绑定到事件。

想法:AcroForms JS(用于 Acrobat 的 Javascript)有一个严重损坏的事件模型。如果您在使用此偶数处理程序时获取组合框的值,它将提供一个陈旧的值。不仅需要一个晦涩难懂的 hack 才能使其工作,而且很少/没有 AcroForms JS 社区可以为此类难题提供答案。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-27
  • 2017-08-20
  • 1970-01-01
  • 2016-06-12
相关资源
最近更新 更多