我使用 LaTeX 创建可填写的 PDF 文档。如何检测是否\CheckBox
已单击?
它似乎只对 有反应onfocus={...}
,而对onclicked={...}
或没有反应onchanged{...}
。
EventListener
我需要在环境中注册吗insDLJS
?
代码:
\documentclass{article}
\usepackage{hyperref}
\begin{document}
\begin{Form}
\CheckBox[name=mytestbox,onchange={app.alert('Hello');},onclick={app.alert('Hello2');}]{Test CheckBox}
\end{Form}
\end{document}
答案1
您正在寻找的活动名为validate
:
\documentclass{article}
\usepackage{hyperref}
\begin{document}
\begin{Form}
\CheckBox[name=mytestbox,validate={app.alert('Hello');}]{Test CheckBox}
\end{Form}
\end{document}
根据 hyperref 文档,其中validate
包含“用于验证条目的 JavaScript 代码”,因此将其用作一般的“已更改”事件可能看起来像是一种黑客行为,但实际上它会/V
在表单字段附加操作字典中生成一个条目。虽然此条目能用于验证,这只是一种可能的用途。适用于 PDF 1.7作为一般的“onchange”事件:
(可选;PDF 1.3)当字段值发生更改时应执行的 JavaScript 操作。此操作可能会检查新值的有效性。(名称 V 代表“验证”。)
validate
使用而不是例如的优点onmousedown
是validate
如果用户使用其他输入方法,它仍然有效,例如使用键盘选择字段而不是用鼠标单击它。
答案2
这些事件有其他名称,在 hpdftex.def 中我发现 onfocus、onblur、onmousedown、onmouseup、onenter、onexit。还有 onclick,但它似乎仅适用于按钮。
并非每个事件对于复选框都有意义,例如鼠标事件似乎与检查冲突。
\documentclass{article}
\usepackage{hyperref}
\begin{document}
\begin{Form}
\CheckBox[name=mytestbox,onenter={app.alert('Hello');}]{Test CheckBox}
\CheckBox[name=mytestboxb,onexit={app.alert('Hello2');}]{Test CheckBox}
\end{Form}
\end{document}
hyperref 的替代品是 eforms (acrotex),它有更多选项(以及更多文档)。参见例如https://tex.stackexchange.com/a/390882/2388