PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Formularfelder einblenden in Abhängigkeit von Auswahlmenue



joshlukas
18-04-2016, 15:30
Hallo liebe Entwickler.

Im Moment bin ich dabei ein Formular zu erzeugen. Soweit so gut und es funktioniert wie ich es mir vorstelle. Nun mein Problem. Es sind mehrere Formulare die sich in nur wenigen Feldern unterscheiden. Mein Vorhaben ist es, wird ein bestimmtes Feld ausgefüllt, sollen bestimmte Felder verborgen werden bzw. andere erscheinen. Mit hyperref und insdljs sollte es möglich sein. Ich weißt allerdings nicht wie genau. Kann mir jemand bitte einen Rat geben?

Vereinfacht gesagt: Es gibt Formular A, Formular B und Formular C. Jedes dieser Formulare haben zum Teil andere Felder zum Ausfüllen. Ich möchte alle drei Formulare in ein/e Formular/PDF vereinen. In Abhängigkeit einer Eingabe (Pulldown Menü) sollen weitere Felder sichtbar bzw. unsichtbar werden.

Anbei ein Minimalbeispiel meiner tex Datei:




\documentclass[
12pt, % Schriftgröße
a4paper, % Papierformat
oneside, % einseitiges Dokument
final % Status des Dokuments (final/draft)
]{scrreprt}
\usepackage[ngerman]{babel}
\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{hyperref}
\usepackage[pdftex]{eqexam}
\usepackage[pdftex]{insdljs}
\begin{insDLJS}[Daten]{Daten}{Auswertung}
var done=0;
function StartFunc(){
if(!done){
done=1;
this.getField(’Wessenprofil’).display=display.hidd en;
this.getField(’Mailadr’).display=display.hidden;
this.getField(’AgentOne’).display=display.hidden;
this.getField(’Telber’).display=display.hidden;
this.getField(’Signatur’).display=display.hidden;
this.getField(’Drucker’).display=display.hidden;
this.getField(’Keyboard’).display=display.hidden;
this.getField(’Textbau’).display=display.hidden;
this.getField(’Favorit’).display=display.hidden;
%app. alert (’Das Formular wurde ge\u00F6 ffnet .’,3 );
}
}

function VeraenderungFunc()
{

if((event.value==’vccc’)||(event.value==’CallCente r’))
{
this.getField(’Wessenprofil’).display=display.visi ble;
this.getField(’Mailadr’).display=display.visible;
this.getField(’AgentOne’).display=display.visible;
this.getField(’Telber’).display=display.visible;
this.getField(’Signatur’).display=display.visible;
this.getField(’Drucker’).display=display.visible;
this.getField(’Keyboard’).display=display.visible;
this.getField(’Textbau’).display=display.visible;
this.getField(’Favorit’).display=display.visible;

this.getField(’Wessenprofil’).value=’Wessenprofil’ ;
this.getField(’Mailadr’).value=’Mailadr’;
this.getField(’AgentOne’).value=’AgentOne’;
this.getField(’Telber’).value=’Telber’;
this.getField(’Signatur’).value=’Signatur’;
this.getField(’Drucker’).value=’Drucker’;
this.getField(’Keyboard’).value=’Keyboard’;
this.getField(’Textbau’).value=’Textbau’;
this.getField(’Favorit’).value=’Favorit’;

this.getField(’Wessenprofil’).setFocus();
}

elseif((event.value==’cc’)||(event.value==’Custome rCare’))
{
this.getField(’Wessenprofil’).display=display.visi ble;
this.getField(’Mailadr’).display=display.visible;
this.getField(’AgentOne’).display=display.hidden;
this.getField(’Telber’).display=display.hidden;
this.getField(’Signatur’).display=display.hidden;
this.getField(’Drucker’).display=display.hidden;
this.getField(’Keyboard’).display=display.hidden;
this.getField(’Textbau’).display=display.hidden;
this.getField(’Favorit’).display=display.hidden;

this.getField(’Wessenprofil’).value=’Wessenprofil’ ;
this.getField(’Mailadr’).value=’Mailadr’;
this.getField(’AgentOne’).value=’AgentOne’;
this.getField(’Telber’).value=’Telber’;
this.getField(’Signatur’).value=’Signatur’;
this.getField(’Drucker’).value=’Drucker’;
this.getField(’Keyboard’).value=’Keyboard’;
this.getField(’Textbau’).value=’Textbau’;
this.getField(’Favorit’).value=’Favorit’;

this.getField(’Wessenprofil’).setFocus();
}

}
\end{insDLJS}

\begin{document}

\begin{Form}
\renewcommand*{\DefaultOptionsofText}{print,border style=U}
\begin{tabular}{p{7.45cm}p{7.45cm}}

Vorname & Nachname \\
\TextField[name=Vorname, width=7.45cm]{} & \TextField[name=Nachname,width=7.45cm]{} \\
& \\
Personalnummer & \\
\TextField[name=Personalnummer, width=7.45cm]{} & \\
& \\ \\ \hline \\
\textbf{Bei Neueinstellung} & \\
Abteilung & Ab \\
\ChoiceMenu[combo,name=Einsatzort,width=7.45cm]{} & \\
& \TextField[name=Abdatum,width=7.45cm]{} \\
& \\ \\ \hline \\
\textbf{Bei Abteilungswechsel} & \\
Abteilung jetzt & Bis \\
\TextField[name=Einsatzortjetzt, width=7.45cm]{} & \TextField[name=Bis,width=7.45cm]{} \\
& \\
Abteilung dann & Ab \\
\TextField[name=Einsatzortdann, width=7.45cm]{} & \TextField[name=Abdatum,width=7.45cm]{} \\
& \\ \\ \hline \\
\textbf{Bei Austritt aus dem Unternehmen} & \\
Letzter Tag der Beschäftigung & \\
\TextField[name=Letztertag, width=7.45cm]{} & \\
& \\
\end{tabular}
\end{Form}

\TextField[name=Wessenprofil,width=7.45cm,validate={Veraender ungFunc();}]{Wessen Profil} \\\\
\TextField[name=Mailadr,width=7.45cm,height=1.5cm,validate={V eraenderungFunc();}]{Welche Mailadresse} \\\\
\CheckBox[width=0.5cm, height=0.5cm, name=AgentOne,validate={VeraenderungFunc();}]{Ja oder nein} \\\\
\TextField[name=Telber,width=7.45cm,validate={VeraenderungFun c();}]{Bereich Telefon} \\\\
\TextField[name=Signatur,width=7.45cm,height=1.5cm,validate={ VeraenderungFunc();}]{Welche Signatur} \\\\
\TextField[name=Drucker,width=7.45cm,validate={VeraenderungFu nc();}]{Welcher Drucker} \\\\
\TextField[name=Keyboard,width=7.45cm,validate={VeraenderungF unc();}]{Keyboardlayout} \\\\
\TextField[name=Textbau,width=7.45cm,validate={VeraenderungFu nc();}]{Welche Textbausteine} \\\\
\TextField[name=Favorit,width=7.45cm,validate={VeraenderungFu nc();}]{Welche Favoriten} \\\\

\end{document}

klops
18-04-2016, 18:08
Wäre schön, wenn Du Dich an die Regeln halten und selbst angeben würdest, wenn Du ein Crosspost (http://texwelt.de/wissen/fragen/16783/formularfelder-einblenden-in-abhangigkeit-von-auswahl-im-dropdown-menu) machst …

joshlukas
19-04-2016, 09:55
Bei allem Respekt. Es sind drei unterschiedliche Domains. Warum gibt es drei verschiedene Seiten (http://golatex.de/, http://texwelt.de/ und mrunix.de). Von was reden wir denn hier genau? Muss ich angeben wo ich sonst noch im Internet meine Frage gestellt habe? Vielen Dank für die Hilfe.

Johannes_B
19-04-2016, 12:23
Crossposts sind nach den Regelwerken von goLaTeX durch Verlinkung anzukündigen beziehungsweise bei mrunix verboten. Solange du die Verlinkung ordentlich setzt, hat aber auch hier keiner ein Problem damit. Das bedeutet, alle Themen verschiedener Domains mit gleicher Fragestellung müssen zweiseitig verlinkt werden.

joshlukas
19-04-2016, 17:52
Na gut. Da mir die Definition von Crossposts so für Foren nicht geläufig war und ich darunter etwas anderes verstehe (https://de.wikipedia.org/wiki/Crossposting), haben wir die Sache ja geklärt. Vielleicht findet sich ja auch mal jemand, der auch auf meine Fragestellung reagieren kann und mir dazu einen Tipp gibt. :)

rais
19-04-2016, 23:42
Da solche Formularfelder AFAIR nicht oder nur beschränkt von jedem PDF-Betrachter berücksichtigt werden: welchen benutzt Du denn? Und ist gewährleistet, daß Deine Zielgruppe den gleichen Betrachter verwendet? Bzw. einen, der die selben Felder in der gleichen Weise anzeigt?



Crossposts sind nach den Regelwerken von goLaTeX durch Verlinkung anzukündigen beziehungsweise bei mrunix verboten.
das hast Du jetzt irgendwie rückwärts. Crossposts sind und waren hier, hmm, verlinkungspflichtig, aber nicht verboten (zumindest, seitdem ich hier poste).


VG

Johannes_B
20-04-2016, 09:12
Ja gut, verboten stimmt nicht ganz. Aber mit den Links sind wir uns wohl einig :- )

Ich dulde keine doppelten Threads/Posts!
Crosspostings: Wer die gleiche Frage noch in einem anderen Forum stellt, gibt den direkten Link zu der Frage in seinem Post an (damit die Frage nicht doppelt beantwortet werden muss).

joshlukas
20-04-2016, 15:32
Danke rais. Der PDF-Betrachter, Adobe Acrobat ist zu nahezu 100% überall der gleiche und trägt sogar die gleiche Version. Es muss also nicht mit allen PDF-Betrachtern funktionieren. So wie ich das gesehen und verstanden habe gibt es wohl die Möglichkeit mit dem Adobe Acrobat Distiller dies zu machen. Da ich diese Software nicht habe und es mich wirklich interessiert wie mein Vorhaben mit freien Werkzeugen, im speziellen in Tex, zu machen ist, bin ich für jeden Tipp, Lösungsansätze oder gar einer vollständigen Lösung sehr dankbar. Meine Kenntnisse reichen leider nicht sehr tief in die Javascript Programmierung.

u_fischer
20-04-2016, 17:27
Dein Beispiel ist zu kompliziert -- die Frage kann man bestimmt mit weniger Feldern formulieren. Es ist auch völlig unklar, welchen Effekt du eigentlich erreichen willst.

joshlukas
21-04-2016, 15:27
Habe das Beispiel gekürzt:



\documentclass[
12pt, % Schriftgröße
a4paper, % Papierformat
oneside, % einseitiges Dokument
final % Status des Dokuments (final/draft)
]{scrreprt}
\usepackage[ngerman]{babel}
\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{hyperref}
\usepackage[pdftex]{eqexam}
\usepackage[pdftex]{insdljs}
\begin{insDLJS}[Daten]{Daten}{Auswertung}
var done=0;
function StartFunc(){
if(!done){
done=1;
this.getField(’Wessenprofil’).display=display.hidd en;
this.getField(’Mailadr’).display=display.hidden;
this.getField(’AgentOne’).display=display.hidden;
this.getField(’Telber’).display=display.hidden;
%app. alert (’Das Formular wurde ge\u00F6 ffnet .’,3 );
}
}

function VeraenderungFunc()
{

if((event.value==’vccc’)||(event.value==’CallCente r’))
{
this.getField(’Wessenprofil’).display=display.visi ble;
this.getField(’Mailadr’).display=display.visible;
this.getField(’AgentOne’).display=display.hidden;
this.getField(’Telber’).display=display.hidden;

this.getField(’Wessenprofil’).value=’Wessenprofil’ ;
this.getField(’Mailadr’).value=’Mailadr’;

this.getField(’Wessenprofil’).setFocus();
}

elseif((event.value==’cc’)||(event.value==’Custome rCare’))
{
this.getField(’Wessenprofil’).display=display.hidd en;
this.getField(’Mailadr’).display=display.hidden;
this.getField(’AgentOne’).display=display.visible;
this.getField(’Telber’).display=display.visible;

this.getField(’AgentOne’).value=’AgentOne’;
this.getField(’Telber’).value=’Telber’;

this.getField(’AgentOne’).setFocus();
}

}
\end{insDLJS}

\begin{document}

\begin{Form}
\renewcommand*{\DefaultOptionsofText}{print,border style=U}
\begin{tabular}{p{7.45cm}p{7.45cm}}

Vorname & Nachname \\
\TextField[name=Vorname, width=7.45cm]{} & \TextField[name=Nachname,width=7.45cm]{} \\
& \\
Personalnummer & \\
\TextField[name=Personalnummer, width=7.45cm]{} & \\
& \\ \\ \hline \\
\textbf{Bei Neueinstellung} & \\
Abteilung & Ab \\
\ChoiceMenu[combo,name=Einsatzort,width=7.45cm]{} & \\
& \TextField[name=Abdatum,width=7.45cm]{} \\
& \\ \\ \hline \\
\textbf{Bei Abteilungswechsel} & \\
Abteilung jetzt & Bis \\
\TextField[name=Einsatzortjetzt, width=7.45cm]{} & \TextField[name=Bis,width=7.45cm]{} \\
& \\
Abteilung dann & Ab \\
\TextField[name=Einsatzortdann, width=7.45cm]{} & \TextField[name=Abdatum,width=7.45cm]{} \\
& \\ \\ \hline \\
\textbf{Bei Austritt aus dem Unternehmen} & \\
Letzter Tag der Beschäftigung & \\
\TextField[name=Letztertag, width=7.45cm]{} & \\
& \\
\end{tabular}
\end{Form}

\TextField[name=Wessenprofil,width=7.45cm,validate={Veraender ungFunc();}]{Wessen Profil} \\\\
\TextField[name=Mailadr,width=7.45cm,height=1.5cm,validate={V eraenderungFunc();}]{Welche Mailadresse} \\\\
\CheckBox[width=0.5cm, height=0.5cm, name=AgentOne,validate={VeraenderungFunc();}]{Ja oder nein} \\\\
\TextField[name=Telber,width=7.45cm,validate={VeraenderungFun c();}]{Bereich Telefon} \\\\

\end{document}



Anbei eine grafische Darstellung was das Formular wann machen soll.

So sollte es nach der Auswahl im PullDown Menü, wenn VCCC ausgewählt wird aussehen.
6195

Und so, wenn CC ausgewählt wird.
6196

joshlukas
27-04-2016, 13:04
Habe noch etwas was in die richtige Richtung geht im Netz gefunden. Weiß allerdings nicht wie ich das, mangels javascript Kenntnisse, miteinander kombinieren kann. -> http://tex.stackexchange.com/questions/117141/hide-latex-parts-through-javascript