Sichtbarkeit von Formularelementen mit Javascript ändern

Fragen und Probleme, die nicht den obigen Kategorien zugeordnet werden können


Jaffet
Forum-Anfänger
Forum-Anfänger
Beiträge: 32
Registriert: Mi 22. Jul 2020, 13:29

Sichtbarkeit von Formularelementen mit Javascript ändern

Beitrag von Jaffet »

Werte Latex-Experten,

ich habe mithilfe des Forums ein Arbeitsblatt für Schüler erstellt, auf dem sie in die Lücken in einem Programmcode ausfüllen sollen. Den Programmcode habe ich mit \usepackage{listings} und die Textfelder mit \usepackage{hyperref}.

Nun möchte ich den Schülern zumindest bei einer Aufgabe die Möglichkeit geben, ihre Eingabe selbst zu validieren. Hierzu habe ich Javascript mit \usepackage{insdljs} integriert und eine Schaltfläche mit der Beschriftung überprüfe ergänzt. (siehe Minimalbeispiel)

Nun ist es so, dass das Textfeld, welches nur dann erscheinen soll, wenn die Eingabe des Schülers korrekt ist, von mir statisch vor PDF-Erzeugung auf den Wert hidden=true gesetzt wurde und mit der richtigen Eingabe und dem Betätigen der Schaltfläche sichbar werden soll. Leider funktioniert das nicht. Die Eigenschaft hidden=true in Zeile 31 des Minimalbeispiels lässt sich nicht überschreiben.

Fällt hierzu jemanden vielleicht eine Lösung ein?

\documentclass[12pt,a4paper,oneside,ngerman]{scrbook}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
%Listening Package
\usepackage{listings}
%Formularelemente
\usepackage{hyperref}
%Javascript
\usepackage{insdljs}

\begin{insDLJS}[test]{test}{JavaScript}
function check1() { 
	var v_1 = this.getField("field1").value;
	if(v_1=="i<=10"){
		this.getField("field2").display=display.visible;
	}
 }
\end{insDLJS}

\begin{document}
\begin{Form}	
\begin{lstlisting}[basicstyle=\small\rmfamily, numbers=left, stepnumber=1,xleftmargin=15pt,escapeinside={(!}{!)}]
	for(int i=1;  (!\TextField[name=field1,width=3cm]{}!)  ;i++){
		Console.WriteLine("{0}",i); 
	}
\end{lstlisting}
\begin{minipage}[t]{0.3\textwidth}
\PushButton[onclick={check1();},width=20pt]{überprüfen}	
\end{minipage}
\begin{minipage}[t]{0.3\textwidth}
	\TextField[name=field2,width=10cm, value=Die Eingabe ist korrekt, hidden=true]{} 
\end{minipage}
\end{Form}
\end{document}

Jaffet
Forum-Anfänger
Forum-Anfänger
Beiträge: 32
Registriert: Mi 22. Jul 2020, 13:29

Re: Sichtbarkeit von Formularelementen mit Javascript ändern

Beitrag von Jaffet »

Hallo Latex-Community,

ich habe bei der Auswertung von Formularfeldern mit Javascript fortschritte gemacht, wie das Minimalbeispiel zeigt.

\documentclass[12pt,a4paper,oneside,ngerman,addpoints]{exam}
%Listening Package
\usepackage{listings}
%Formularelemente
\usepackage{hyperref}
%Javascript
\usepackage{insdljs}
%Farbpaket
\usepackage{xcolor}
\begin{insDLJS}[]{test}{test}
function check1() { 
	var field1 = this.getField("field1");
	if(field1.value == "1"){
		field1.fillColor = color.green;
	}else{
		field1.fillColor = color.red;
	}
}
\end{insDLJS}
\begin{document}
\begin{Form}	
\textbf{Aufgaben}
\begin{questions}
\question Vervollständigen Sie das abgebildete Programm, sodass es während der Laufzeit alle natürlichen Zahlen zwischen 1 und 10 in aufsteigender Reihenfolge ausgibt. Geben Sie Ihre Lösung ohne Leerzeichen an.\\	
\begin{lstlisting}[basicstyle=\small\rmfamily, numbers=left, stepnumber=1,xleftmargin=15pt,escapeinside={(!}{!)}]
for(int i=(!\TextField[name=field1,width=0.5cm,bordercolor=black]{}!); i<11;i++){
	Console.WriteLine("{0}",i);
}
\end{lstlisting}
\begin{minipage}[t]{0.3\textwidth}
\fboxsep=0pt
\colorbox{gray}{%
	\PushButton[
	name=btn1,
	onclick={check1();},
	borderwidth=0.5pt,
	bordercolor=black,
	]{\textcolor{black}{\strut überprüfen}}}	
\end{minipage}
\begin{minipage}[t]{0.3\textwidth}
	\TextField[name=info_field1,width=10cm, value=Die Eingabe ist korrekt, hidden=true]{} 
\end{minipage}
\end{questions}
\end{Form}
\end{document}

Wenn man das PDF-Dokument mit dem Adobe Acrobat Reader öffnet, einen Wert in die Code-Zeile 1 eingibt und danach auf prüfen klickt, wird das Eingabefeld rot markiert, falls die Eingabe falsch ist und grün, wenn sie korrekt ist.

Geholfen hat mir dabei der Guid https://www.adobe.com/content/dam/acom/ ... _guide.pdf.

Dort steht unter anderem, dass man auf die Hintergrundfarbe eines Formularelementes über die fillColor-Eigenschaft zugreift:

	var field4 = this.getField("field4");
	field4.fillColor = color.green;

Etwas enttäuscht bin ich darüber, dass das alles nur unter Adobe Acrobat Reader DC funktioniert. Wenn ich die PDF z. B. mit Firefox, Chrom oder einem anderen PDF-Reader öffne passiert nichts mehr. Kein Javascript, oder muss man das irgendwo aktivieren?

Vielleicht hat jemand hierzu noch Ideen oder Lösungsvorschläge.

Viele Grüße


Antworten