hyperref
包选项 onchange 和 onkeypress如何使用?
在下面的将输入文本传输到输出文本的例子中,只有使用 onclick 选项的按钮有效……但文本字段内的 onchange 选项无效。
如果输入文本字段发生变化,我希望立即将输入文本复制到输出文本字段,没有使用按钮。
\documentclass[20pt,a4paper]{article}
\usepackage{xcolor}
\usepackage[]{hyperref}
%% Short hand commands
\newcommand{\textforlabel}[2]{%
\TextField[name={#1}, value={#2}, width=9em,align=2,%
bordercolor={0.990 .980 .85},%
readonly=true]{}%
}%
\newcommand{\heading}[1]{\textsc{#1}}
%% document
\begin{document}
\begin{Form}
%% Input
\heading{Input}
\\
\\
\textforlabel{l01}{Input:}
\TextField[name=input1,onchange={%
var datastring1=this.getField("input1").value;
this.getField("output1").value=datastring1;%
}%
,width=2in, bordercolor={0.650 .790 .94}]{}%
\\
%% Push button
\PushButton[name=button1,onclick={%
var datastring1=this.getField("input1").value;
this.getField("output1").value=datastring1;%
}%
,bordercolor={0 0 0}]{To Output}
\\
%% Output
\heading{Output}
\\
\\
\textforlabel{l02}{Output:}
\TextField[name=output1,width=2in,%
bordercolor={0.650 .790 .94},readonly=true]{}
\end{Form}
\end{document}
答案1
您可以使用JavaScript 中keystroke
的选项\TextField
并评估属性来设置输出字段的值。event.value
不幸的是,event.value
只包含在收到按键之前已知的值input1
。您必须通过按“Enter”结束输入才能获得最后输入的键:
\documentclass[20pt,a4paper]{article}
\usepackage{xcolor}
\usepackage[]{hyperref}
%% Short hand commands
\newcommand{\textforlabel}[2]{%
\TextField[name={#1}, value={#2}, width=9em,align=2,%
bordercolor={0.990 .980 .85},%
readonly=true]{}%
}%
\newcommand{\heading}[1]{\textsc{#1}}
%% document
\begin{document}
\begin{Form}
%% Input
\heading{Input}
\\
\\
\textforlabel{l01}{Input:}
\TextField[name=input1,keystroke={%
% var datastring1=this.getField("input1").value;
% this.getField("output1").value=datastring1;%
this.getField("output1").value=event.value;
}%
,width=2in, bordercolor={0.650 .790 .94}]{}%
\\
%%% Push button
%\PushButton[name=button1,onclick={%
% var datastring1=this.getField("input1").value;
% this.getField("output1").value=datastring1;%
% }%
% ,bordercolor={0 0 0}]{To Output}
% \\
%% Output
\heading{Output}
\\
\\
\textforlabel{l02}{Output:}
\TextField[name=output1,width=2in,%
bordercolor={0.650 .790 .94},readonly=true]{}
\end{Form}
\end{document}
答案2
这对你来说够了吗?它不是完全即时的,而是直接改变整个答案。你必须按下 Tab 或进入另一个字段来实现 JS 命令,与 Keystroke 类似,它在事件发生后才实现最后一个字母。
\documentclass[20pt,a4paper]{article}
\usepackage{xcolor}
\usepackage[]{hyperref}
%% Short hand commands
\newcommand{\textforlabel}[2]{%
\TextField[name={#1}, value={#2}, width=9em,align=2,%
bordercolor={0.990 .980 .85},%
readonly=true]{}%
}%
\newcommand{\heading}[1]{\textsc{#1}}
%% document
\begin{document}
\begin{Form}
\heading{Input 1}
\\
\\
\textforlabel{l01}{Input 1:}
\TextField[name=input1,width=2in, bordercolor={0.650 .790 .94}]{}%
\\
%% Push button
\PushButton[name=button1,onclick={%
var datastring1=this.getField("input1").value;
this.getField("output1").value=datastring1;%
}%
,bordercolor={0 0 0}]{To Output}
\\
%% Output
\heading{Output 1}
\\
\\
\textforlabel{l02}{Output1:}
\TextField[name=output1,width=2in,%
bordercolor={0.650 .790 .94},readonly=true]{}
\vspace{40pt}
%% Input 2
\heading{Input 2}
\\
\\
\textforlabel{l03}{Input 2:}
\TextField[
name=input2,
width=2in,
bordercolor={0.650 .790 .94}]{}
\\
%% Output 2
\heading{Output 2}
\\
\\
\textforlabel{l04}{Output:}
\TextField[
name=output2,
width=2in,
bordercolor={0.650 .790 .94},
readonly=true,
calculate = {%
event.value = this.getField("input2").value;
}
]{}
\end{Form}
\end{document}