Zeige letzte Bearbeiter
1 {{content/}}
2
3 Im [[CSS-Bereich>>doc:Formcycle.FormDesigner.CodingPanel.CSSTab.WebHome]] kann über CSS-Selektoren auf [[Formularelemente>>doc:Formcycle.FormDesigner.FormElements.WebHome]] zugegriffen werden und ihre Darstellung entsprechend angepasst werden. Im [[JavaScript-Bereich>>doc:Formcycle.FormDesigner.CodingPanel.ScriptTab.WebHome]] wird das Framework //jQuery //verwendet, welches CSS-Selektoren mit einigen Erweiterungen verwendet. Über Selektoren kann auch mit //JavaScript //auf Formularelemente zugegriffen werden.
4
5 Weitere Informationen zu //CSS //und weiterführende Links sind im [[Abschnitt zum CSS-Bereich>>doc:Formcycle.FormDesigner.CodingPanel.CSSTab.WebHome]] zu finden.
6
7 Weitere Informationen zu //jQuery// und weiterführende Links sind im [[Abschnitt zum JavaScript-Bereich>>doc:Formcycle.FormDesigner.CodingPanel.WebHome]] zu finden.
8
9 Im Folgenden wird erklärt, wie Formularelemente mit Selektoren ausgewählt werden können und welche speziellen Selektoren es bei Formularen von {{formcycle/}} gibt.
10
11 == Attributselektoren bei der Formularerstellung ==
12
13 === Attributselektor Name ===
14
15 Besonders im JavaScript wird häufig auf ein Formularelement mit einem bestimmten Namen zugegriffen. Dazu kann folgender Selektor verwendet werden.
16
17 {{code language="Javascript"}}
18 $("[name='element']") // mittels jQuery im JavaScript-Bereich
19 {{/code}}
20
21 {{code language="CSS"}}
22 [name="element"] { /* mittels CSS im CSS-Bereich */
23 color: #DDD;
24 }
25 {{/code}}
26
27 Der Wert des Attributs //name// entspricht hierbei dem Namen des Formularelements. Also dem Namen, welcher im {{designer/}} unter [[Grundeigenschaften>>doc:Formcycle.FormDesigner.ElementProperties.BaseProperties]] vergeben wurde.
28
29 Diesse Selektoren sind spezielle Attributselektoren. Sie können allgemein verwendet werden, um ein Elemente anhand seiner Attribute zu selektieren. In HTML kann jedes Element verschiedene Attribute haben:
30
31 {{code language="html"}}
32 <input id="xi-tf-1" class="XItem XTextField" name="tfMail" value="demo@example.com" data-count="9">
33 {{/code}}
34
35 Elemente können anhand dieser Attribute und ihrer Werte selektiert werden. Ein Attributselektor besteht aus 2 Teilen und hat die immer die Form
36
37 {{code language="css"}}
38 [key="value"]
39 {{/code}}
40
41 ; key
42 : Name des Attributs, nach dem gesucht werden. Nur Elemente, welche dieses Attribut gesetzt haben, werden selektiert.
43 ; value
44 : Wert des Attributs. Nur Elemente, die zusätzlich noch diesen Wert für das Attribut haben, werden selektiert.
45
46 Um also alle Elemente zu selektieren, welche das Attribut //value// gesetzt haben, wird {{code}}[value]{{/code}} verwendet. Um nur die zu selektieren, bei den das Attribut auf einen bestimmten Wert gesetzt ist, wird {{code}}[value="demo"]{{/code}} genutzt.
47
48 === Attributselektor xn ===
49
50 Alle Formularlemente sind in einem Container gekapselt. In diesem Container sind neben dem eigentlichen Formularelement auch noch andere HTML-Elemente wie der Beschriftungstext (Label). Um den Container zu selektieren, wird statt //name// ein Attributselektor auf das Attribut //xn// (steht für xima-name) verwendet.
51
52 {{code language="javascript"}}
53 $("[xn='element']"); // mittels jQuery im JavaScript-Bereich
54 {{/code}}
55
56 {{code language="css"}}
57 [xn=element] { /* mittels CSS im CSS-Bereich */
58 font-weight: 600;
59 }
60 {{/code}}
61
62 === Weitere Attributselektoren ===
63
64 {{code language="javascript"}}
65 // Alle Eingabefelder vom Typ "text" selektieren
66 $("input[type='text']")
67 {{/code}}
68
69 {{code language="javascript"}}
70 // Alle Bilder mit einem "alt" Attribut
71 $('img[alt]')
72 {{/code}}
73
74 Es ist auch möglich, etwa nur Elemente zu selektieren, bei denen der Wert eines Attribut auf etwas bestimmtes endet. Hierzu wird statt einem Gleichheitszeichen {{code}}={{/code}} der Operator {{code}}$={{/code}} eingesetzt:
75
76 {{code language="javascript"}}
77
78 // Alle Links, die im Attribute "href" einen Wert haben, der mit ".pdf" endet.
79 $("a[href$='.pdf']")
80 {{/code}}
81
82 == Klassenselektoren ==
83
84 Im HTML gibt es ein spezielles Attribut: {{code}}class{{/code}}. Dies wird auch oft CSS-Klasse bezeichnet. Hier können mehrere frei vergebbare Klassen gelistet werden, getrennt mit einem Leerzeichen. Im CSS kann das etwa genutzt werden, um allen Elementen mit einer bestimmten Klassen ein spezielles Layout zu geben. Im JavaScript kann allen Elemente mit einer bestimmten zusätzliche Funktionalität verliehen werden. Beispielsweise haben alle Formularelemente in {{formcycle/}} immer die Klasse {{code}}XItem{{/code}} und je nach Art des Formularelements noch ein zusätzliche Klasse, etwa [[XTextField>>doc:Formcycle.FormDesigner.FormElements.Input]] oder [[XUpload>>doc:Formcycle.FormDesigner.FormElements.Upload]].
85
86 Da Klassen so häufig benutzt werden, gibt es hierfür spezielle Selektoren. Alle Elemente einer Klasse können selektiert werden, in dem ein Selektor bestehend aus einem Punkt gefolgt vom Namen der Klasse genutzt wird. Das HTML könnte wie folgt aussehen:
87
88 {{code language="html"}}
89 <input class="XItem XTextField">
90 <select class="XItem XSelect">
91 <option value="">Bitte wählen</option>
92 <option value="1">Option 1</option>
93 <option value="2">Option 2</option>
94 </select>
95 {{/code}}
96
97 Nun können Elemente mit Selektoren ausgewählt werden:
98
99 {{code language="css"}}
100 /* Alle Elemente mit der Klasse XItem */
101 .XItem {
102 font-size: 20px; /* Schriftgröße auf 20 Pixels stellen*/
103 }
104
105 /* Nur Textfelder (Klasse XTextField) */
106 .XTextField {
107 color: blue; /* Schriftfarbe auf blau setzen */
108 }
109 {{/code}}
110
111 == Arbeiten mit selektierten Elementen ==
112
113 {{jsdoc name=""/}}
114
115 Nachdem Elemente selektiert wurden, können diese mittels Funktionen von //jQuery// oder über weitere von {{formcycle/}} [[bereitgestellte Funktionen>>doc:Formcycle.FormDesigner.CodingPanel.ScriptTab.AdditionalScriptFunctions.WebHome]] verändert werden.
116
117 {{code language="Javascript"}}
118 // Alle Eingabefelder verstecken
119 $('input[type=text]').visible(false)
120
121 // Element mit Namen Postleitzahl als Mussfeld schalten
122 $("[name='Postleitzahl']").setRequired(true)
123 {{/code}}
124
125 === Generische JavaScript-Funktionalität ===
126
127 {{figure image="designer_selectors_prefill_de.png"}}
128 Formularfelder werden mit den Daten des angemeldeten Nutzer vorbefüllt. Diese werden aus dem Object //XFC_METADATA.currentUser// gelesen. Über das Attribut //data-user// wird gesteuert, mit welcher Eigenschaft das Formularfeld vorbefüllt werden soll.
129 {{/figure}}
130
131 Im {{designer/}} können zudem unter Eigenschaften einem Element [[zusätzliche Klassen>>doc:Formcycle.FormDesigner.ElementProperties.CSSClasses]] und [[eigene Attribute>>doc:Formcycle.FormDesigner.ElementProperties.Attributes]] mitgegeben werden. Diese können dann entsprechend selektiert werden. Damit kann etwa JavaScript-Funktionalität geschrieben werden, die auf alle Elemente mit einem bestimmten Attribut angewendet wird. Im {{designer/}} lässt sich dann festlegen, für welche Elemente diese Funktionalität angewandt werden soll.
132
133 {{code language="javascript"}}
134 $("[data-user]").each((_, element) => {
135 const prop = element.dataset.user;
136 const value = XFC_METADATA.currentUser[prop];
137 if (value && !element.value) {
138 element.value = value;
139 }
140 });
141 {{/code}}
142
143 An einem Element wird das Attribut //data-user// hinterlegt. Hier kann ein Wert wie etwa //email// oder //forename// eingetragen werden. Es wird dann beim Öffnen des Formulars in den Daten des aktuellen Nutzer geschaut, ob er diese Eigenschaft (E-Mail-Adresse, Vorname usw.) hat. Wenn ja, wird das Formularfeld automatisch mit dem Wert vorbefüllt. Vorteil bei dieser Vorgehensweise ist, dass das JavaScript nur einmal geschrieben werden muss und dann in jedem Formular benutzt werden kann (falls es als [[Mandatenressource>>doc:Formcycle.UserInterface.FilesAndTemplates.Files]] hochgeladen wird).
144
145 == Selektoren für Formularlemente ==
146
147 Hier findet sich eine Auflistung für häufig verwendete Selektoren in {{formcycle/}}.
148
149 {{table dataTypeAlpha="0"}}
150 |=Selektor|=Bemerkung|=Beispiel (jQuery / CSS)
151 |FORM.xm-form|Selektiert das gesamte Formular.|{{code language="javascript"}}$('FORM.xm-form'){{/code}}
152 \\
153 {{code language="css"}}FORM.xm-form {
154 font-family: Arial;
155 }{{/code}}
156 |.class|Selektiert alle Elemente mit der entsprechenden Klasse. Eine Auflistung aller Klassennamen der Formularelemente findet sich unten. Zusätzlich gibt es noch die folgende Klassen.|{{code language="javascript"}}$('.XPage'){{/code}}
157 \\
158 {{code language="css"}}.XPage {
159 background-color: #EEE;
160 }{{/code}}
161 |.required-star**|Selektiert alle Elemente, die den Stern darstellen, der an einem Mussfeld angezeigt wird.|{{code language="javascript"}}$('.required-star'){{/code}}
162 \\
163 {{code language="css"}}.required-star {
164 color: red;
165 }{{/code}}
166 |.xm-item-div|Jedes [[Formularelement>>doc:Formcycle.FormDesigner.FormElements.WebHome]] befindet sich in einem DIV-Element mit der Klasse xm-item-div. Dieses DIV-Element enthält die entsprechenden Elemente wie //INPUT//, //SELECT//, oder //LABEL//.
167 Beispielsweise besteht ein [[Eingabefeld>>doc:Formcycle.FormDesigner.FormElements.Input]] aus einem LABEL-Element und einen INPUT-Element, welche beide zusammen in einem DIV mit der Klasse .xm-item-div enthalten sind.|{{code language="javascript"}}$('[.xm-item-div]'){{/code}}
168 \\
169 {{code language="css"}}.xm-item-div {
170 font-size: 1.2em;
171 }{{/code}}
172 |.C<KLASSE>|Wie oben unter //.xm-item-div// erläutert, befinden sich alle Formularelemente in einem umschließenden //DIV//-Element der Klasse //.xm-item-div//. Wenn das Formularelement z.B. die Klasse //XTextField //hat, trägt dieses //DIV//-Element trägt zusätzlich noch die Klasse //CXTextField//. //C// steht hierbei für //Container//.
173 \\Hiermit können alle Container einer bestimmten Art von Formularelement selektiert werden.
174 \\Eine Auflistung der Klassen findet sich unten.|{{code language="javascript"}}$('[.CXTextField]')
175 $('[.CXCheckbox]')
176 $('[.CXImage]'){{/code}}
177 \\
178 {{code language="css"}}.CXCheckbox label {
179 color: #aaa;
180 }{{/code}}
181 |.xm-form-row|Werden mehrere Formularelemente in einer Reihe nebeneinander platziert, so wird ein DIV-Element mit der Klasse //xm-form-row// erzeugt, welches diese Elemente enthält.|{{code language="javascript"}}$('[.xm-form-row]'){{/code}}
182 \\
183 {{code language="css"}}.xm-form-row {
184 border-style: solid;
185 }{{/code}}
186 |name|
187 Auflösen des Elements über den Namen. Dieser Selektor funktioniert bei jedem Element. Bei Elementen, die [[wiederholbar>>doc:Formcycle.FormDesigner.ElementProperties.BaseProperties||anchor="repeat"]] sind, sollte dieser Selektor jedoch nicht verwendet werden, da das Attribut //name //um einen Index erweitert wird//. //Stattdessen kann// org_name //verwendet werden, siehe unten.|{{code language="javascript"}}$('[name=element]'){{/code}}
188 \\
189 {{code language="css"}}[name=element]{
190 font-weight: 700;
191 }{{/code}}
192 |org_name|Wird ein Formularelement [[wiederholbar>>doc:Formcycle.FormDesigner.ElementProperties.BaseProperties||anchor="repeat"]], erhält jedes Element zusätzlich das Attribut //org_name//. Der //org_name// wird immer auf den ursprünglichen Namen des Elements gesetzt. Der //name// wird um einen Laufindex erweitert.|{{code language="javascript"}}$('[org_name=tf1]'){{/code}}
193 \\
194 {{code language="css"}}[org_name=tf1] {
195 margin: 2px;
196 }{{/code}}
197 |xn|Selektiert den Container eines [[Formularelements>>doc:Formcycle.FormDesigner.FormElements.WebHome]]. Jedes Formularelement befindet sich in einem Container. Dieser enthält neben dem eigentlichen Formularelement auch noch andere Teiles, etwa den Beschreibungstext (Label).|{{code language="javascript"}}$('[xn=tf1]'){{/code}}
198 \\
199 {{code language="css"}}[xn=XTextArea] {
200 font-family: sans-serif;
201 }
202 {{/code}}
203 |cn|Selektiert alle Container von [[Formularelementen>>doc:Formcycle.FormDesigner.FormElements.WebHome]] einer bestimmten Klasse. Eine Liste der Klassen befindet sich unten.|{{code language="javascript"}}$('[cn=XPage]'){{/code}}
204 \\
205 {{code language="css"}}[cn=XTextField]{
206 font-family: serif;
207 }{{/code}}
208 {{/table}}
209
210 == Liste der Klassen ==
211
212 Jede Art von Formularlementtyp hat eine bestimmte CSS-Klasse. Mit dieser können alle Formularelement eines bestimmten Typs selektiert werden.
213
214 {{table dataTypeAlpha="0"}}
215 |=Selektor|=Bemerkung|=Beispiel
216 |XPage|Selektiert alle [[Seiten>>doc:Formcycle.FormDesigner.FormElements.Page]].|{{code language="javascript"}}$(".XPage']")
217 $("[cn='XPage']"){{/code}}
218 |XContainer|Selektiert alle [[Container>>doc:Formcycle.FormDesigner.FormElements.Container]].|{{code language="javascript"}}$(".XContainer']")
219 $("[cn='XContainer']"){{/code}}
220 |XFieldSet|Selektiert alle [[Fieldsets>>doc:Formcycle.FormDesigner.FormElements.Fieldset]].|{{code language="javascript"}}$(".XFieldSet")
221 $("[cn='XFieldSet']"){{/code}}
222 |XSpan|Selektiert alle [[Texte>>doc:Formcycle.FormDesigner.FormElements.Text]].|{{code language="javascript"}}$(".XSpan")
223 $("[cn='XSpan']"){{/code}}
224 |XTextArea|Selektiert alle [[Editoren>>doc:Formcycle.FormDesigner.FormElements.Textarea]].|{{code language="javascript"}}$(".XTextArea")
225 $("[cn='XTextArea']"){{/code}}
226 |XTextField|Selektiert alle [[Eingabefelder>>doc:Formcycle.FormDesigner.FormElements.Input]].|{{code language="javascript"}}$(".XTextField")
227 $("[cn='XTextField']"){{/code}}
228 |XCheckbox|Selektiert alle [[Checkboxen>>doc:Formcycle.FormDesigner.FormElements.Checkbox]].|{{code language="javascript"}}$(".XCheckbox")
229 $("[cn='XCheckbox']"){{/code}}
230 |XSelect|Selektiert alle [[Auswahlelemente>>doc:Formcycle.FormDesigner.FormElements.Selection]].|{{code language="javascript"}}$(".XSelect")
231 $("[cn='XSelect']"){{/code}}
232 |XLine|Selektiert alle [[Trennlinien>>doc:Formcycle.FormDesigner.FormElements.Line]].|{{code language="javascript"}}$(".XLine")
233 $("[cn='XLine']"){{/code}}
234 |XImage|Selektiert alle [[Bilder>>doc:Formcycle.FormDesigner.FormElements.Image]].|{{code language="javascript"}}$(".XImage")
235 $("[cn='XImage']"){{/code}}
236 |XSpacer|Selektiert alle [[Abstandsblöcke>>doc:Formcycle.FormDesigner.FormElements.Spacer]].|{{code language="javascript"}}$(".XSpacer")
237 $("[cn='XSpacer']"){{/code}}
238 |XUpload|Selektiert alle [[Upload-Elemente>>doc:Formcycle.FormDesigner.FormElements.Upload]].|{{code language="javascript"}}$(".XUpload")
239 $("[cn='XUpload']"){{/code}}
240 |XButtonList|Selektiert alle [[Schaltflächen-Leisten>>doc:Formcycle.FormDesigner.FormElements.Button]].|{{code language="javascript"}}$(".XButtonList")
241 $("[cn='XButtonList']"){{/code}}
242 {{/table}}
Copyright 2000-2024