Hyperref \TextField – 如何在不使用按钮的情况下实现 hyperref 操作

Hyperref \TextField – 如何在不使用按钮的情况下实现 hyperref 操作

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}

相关内容