Beispiel: Formulare in JavaScript
Ein wichtiges Einsatzgebiet von JavaScript ist die Überprüfung und Validierung von Formularen. Allerdings biete JavaScript auch hier deutlich mehr Möglichkeiten - wir zeigen Sie Ihnen.Formulare überprüfen
Gerade wenn wichtige Benutzerdaten oder Kundeninformationen gesammelt werden müssen, ist eine Eingabeprüfung fast unumgänglich. JavaScript stellt zum Zugriff auf das Formular das froms-Array zur Verfügung - es kann aber auch direkt über den Namen auf das Formular zugegriffen werden. Formulare enthalten in der Regel verschiedene Typen von Eingabefeldern bzw. Eingabefelder mit einem anderen Kontext. Diese könnten z.B. Pflichtfelder für Namen oder Adresse, Email, Radiobuttons oder Select-Felder sein. Als HTML-Grundlage für die kommenden Beispiele wird folgendes Formular vorausgesetzt. Es kann über document.form1 oder document.forms['form1'] angesprochen werden. Die einzelnen Felder können dann mit dem Namen oder über das elements-Array angesprochen werden: document.form1.Namensfeld oder document.form1.elements['Namensfeld']. Die HTML-Grundlage:<form name="form1" onsubmit="return pruefen()">
Name: <input name="Namensfeld" type="text"><br>
Anschrift: <input name="Anschriftsfeld" type="text"><br>
E-Mail: <input name="EMailfeld" type="text"><br>
Betreff: <select name="Betreff">
<option value="nichts">Bitte wählen</option>
<option value="Anfrage">Anfrage</option>
<option value="Bestellung">Bestellung</option>
<option value="Hinweis">Hinweis</option>
</select><br>
Newsletter abonieren:
<input type="Radio" name="News" value="ja"> ja /
nein <input type="Radio" name="News" value="nein">
<br>
Text: <textarea name="Eingabe" cols="30" rows="3">
</textarea><br>
<input type="Submit"><input type="reset">
</form>
Pflichtfelder
Besonders bei Kontaktanfragen ist meist die Eingabe eines Namens unumgänglich. Um zu prüfen, ob auch wirklich alle Felder ausgefüllt sind, schauen wir, ob sie einen Inhalt (value-Eigenschaft) besitzen:function pruefen()
{
res = true;
a = document.form1;
if(a.Namensfeld.value == ''){res = false;}
if(a.Anschriftsfeld.value == ''){res = false;}
if(a.EMailfeld.value == ''){res = false;}
if(a.Eingabe.value == ''){res = false;}
if(res == false){alert('Bitte Formular vollständig ausfüllen!')}
return res;
}
Email-Felder
Bei Feldern, in die E-Mail-Adressen eingegeben werden sollen, sollte neben dem Inhalt auch geprüft werden, ob es sich dabei wirklich um eine E-Mail-Adresse handelt. Handelt es sich um ein E-Mail-Adresse, so ist mindestens ein Buchstabe, ein @-Zeichen, 3 weitere Buchstaben, und Punkt und nochmals mindestens zwei Buchstaben vorhanden. Da dies eine ziemlich komplexe Fragestellung ist, empfiehlt sich hiera) lediglich zu prüfen, ob ein @-Zeichen vorhanden ist und der Inhalt mindestens 8 Zeichen lang ist. Oder
b) mit regulären Ausdrücken exakt eine Prüfung vor zu nehmen.
Erstere Lösung könnte wie folgt aussehen:
if(a.EMailfeld.value.indexOf('@') == -1){res = false;}
if(a.EMailfeld.value.length < 8){res = false;}
reg = new RegExp('^([a-zA-Z0-9-._]+)'+ //Name
'(@)'+ //@-Zeichen
'([a-zA-Z0-9-.]+)'+ //Domain
'(.)'+ //Punkt
'([a-zA-Z]{2,4})$'); //TLD
if(reg.test(a.EMailfeld.value) == false){res = false;}
Radiobuttons
Sind Radiobuttons nicht von vornherein markiert, müssen wir testen, ob nun eines eine Markierung enthält. Da Radiobuttons alle den gleichen Namen tragen, ergibt sich bei JavaScript für diese Buttons ein Array. Soll auf einen Button der gleichen Buttons zugegriffen werden, so kann dies über den Index des Buttons geschehen: document.form1.News[1]... . Durchlaufen wir alle Buttons, können wir testen ob einer markiert wurde (und ggf. welcher das ist):if(a.News[0].checked == false && a.News[1].checked == false)
{res = false;}
var alleFalse = true;
for(i = 0; i < a.News.length; i++)
{
if(a.News[0].checked == true)
{
alleFalse = false;
break;
}
}
// wenn alleFalse == true, dann wurde kein Radiobutton ausgewählt
Select-Felder
In unserem Beispiel haben wir auch ein Select-Feld definiert über das der Betreff der Anfrage ausgewählt werden kann. Damit der Besucher auch auf jeden Fall einen Betreff auswählt (die Standardauswahl ist ja "Bitte wählen") sollte überprüft werden, welcher Eintrag gewählt wurde. Auf das Select-Feld kann wie gewohnt über den Namen zugegriffen werden - die einzelnen Einträge sind über das options-Array abrufbar. Da uns in diesem Beispiel ausreicht zu wissen, dass nicht der erste Eintrag ("Bitte wählen") gewählt wurde, brauchen wir nur zu checken, ob die Eigenschaft selectedIndex des Select-Feldes ungleich 0 (Null) ist. Die Eigenschaft gibt den Index des ausgewählten Eintrags an: Wurde der erste ausgewählt, gibt sie 0 aus, für den zweiten 1, für den dritten 2 usw. Wir vervollständigen das Beispiel mit folgendem Code:if(a.Betreff.selectedIndex == 0){res = false;}
Das Resultat
Die fertige Funktion pruefen könnte letztlich komplett zusammengesetzt etwas so aussehen:function pruefen()
{
res = true;
a = document.form1;
if(a.Namensfeld.value == ''){res = false;}
if(a.Anschriftsfeld.value == ''){res = false;}
if(a.EMailfeld.value == ''){res = false;}
if(a.Eingabe.value == ''){res = false;}
reg = new RegExp('^([a-zA-Z0-9-._]+)'+ //Name
'(@)'+ //@-Zeichen
'([a-zA-Z0-9-.]+)'+ //Domain
'(.)'+ //Punkt
'([a-zA-Z]{2,4})$'); //TLD
if(reg.test(a.EMailfeld.value) == false){res = false;}
if(a.News[0].checked == false && a.News[1].checked == false)
{res = false;}
if(a.Betreff.selectedIndex == 0){res = false;}
if(res == false){alert('Bitte Formular vollständig ausfüllen!')}
return res;
}
Select-Feld als Link
Oftmals sieht man auch, dass Select-Felder als Links verwendet werden. Kaum hat man einen Eintrag ausgewählt, schon wird man auf die entsprechende Seite weiter geleitet. Auch dieser Trick wird - wie sollte es anders sein - mit JavaScript realisiert. Als Grundlage für dieses Beispiel nehmen wir folgendes Select-Feld. Es enthält die Einträge Startseite, News, Angebote, Referenzen und Kontakt. Jeder Eintrag wurde zusätzlich mit einem Wert versehen (value-Attribut des option-Elements) der die aufzurufende Seite angibt:<select>
<option value="-">zur Seite springen</option>
<option value="start.htm">Startseite</option>
<option value="news.htm">News</option>
<option value="angebot.htm">Angebote</option>
<option value="referenz.htm">Referenzen</option>
<option value="kontakt.htm">Kontakt</option>
</select>
<select onChange="
if(this.selectedIndex != 0)
{location.href = this.options[this.selectedIndex].value}
">
Grafische Checkboxen und Radiobuttons
Unter Umständen kann es für das Design einer Seite nützlich sein, wenn die Checkboxen und Radiobuttons grafisch angepaßt werden. Mit Hilfe von JavaScript können anstelle der Checkboxen und Radiobuttons auch Grafiken verwendet werden - alles was dazu notwendig ist sind je zwei Grafiken und ein wenig JavaScript . Die Grafiken sollten recht schnell erstellt sein und könnten z.B. so aussehen:
Darstellung: Vorlagen für Radiobuttons (l.) und Checkboxen (r.)
Grafische Checkboxen
Für jede Checkbox brauchen wir jeweils ein Bild und ein verstecktes Input-Feld, damit der Wert der Checkbox auch abgeschickt wird sofern es markiert wurde. Um das Bild kommt noch ein Link (der auch gleich den Text der Checkbox umschließen kann) damit wir das Bild mit JavaScript verknüpfen können:<input type="hidden" value="false" name="cb1">
<a href="#" onclick="CheckBox('cb1'); return false;">
<img src="checkbox1.jpg" border="0" name="cb1">
Text für Checkbox 1
</a>
function CheckBox(feld)
{
if(document.form1[feld].value == 'true')
{
document.form1[feld].value = 'false';
document.images[feld].src = 'checkbox1.jpg';
}
else
{
document.form1[feld].value = 'true';
document.images[feld].src = 'checkbox2.jpg';
}
}
Grafische Radiobuttons
Auch grafische Radiobuttons sind derart einfach realisierbar. Da bei Radiobuttons immer mehrere Buttons zu einer Gruppe zusammengesetzt werden muss die Technik jedoch etwas erweitert werden. Wie oben auch, brauchen wir zunächst ein verstecktes Input-Feld für eine einzelne Gruppe von Buttons. Außerdem brauchen wir natürlich für jeden Button ein Bild mit einem Link drum rum - auch wie oben:<input type="hidden" value="0" name="r1">
<a href="#" onclick="RadioButton('r1',0,3); return false;">
<img src="radio1.jpg" border="0" name="r10">
Text für Radiobutton 1
</a><br>
<a href="#" onclick="RadioButton('r1',1,3); return false;">
<img src="radio1.jpg" border="0" name="r11">
Text für Radiobutton 2
</a><br>
<a href="#" onclick="RadioButton('r1',2,3); return false;">
<img src="radio1.jpg" border="0" name="r12">
Text für Radiobutton 3
</a><br>
function RadioButton(feld,index,maxindex)
{
document.form1[feld].value = index;
for(i=0;i<maxindex;i++)
{
if(index != i){document.images[feld+''+i].src = 'radio1.jpg';}
else{document.images[feld+''+i].src = 'radio2.jpg';}
}
}
Paßworteingabe prüfen
Wenn sich ein Benutzer das erste mal auf einer Seite anmeldet muss er manchmal ein Paßwort angeben mit dem er später auf die Inhalte zugreifen kann. Damit er sich nicht vertippt wird er meist gebeten das Paßwort zweimal einzutippen. Mit JavaScript kann dann geprüft werden, ob der Besucher denn auch zweimal das gleiche eingetippt hat. Ist das nicht der Fall sollte er seine Eingabe natürlich noch mal korrigieren. Dazu braucht es im Prinzip nicht viel: Bei onsubmit wird geprüft, ob die zwei Felder übereinstimmend sind - wenn ja passiert nichts, wenn nein wird eine Meldung angezeigt und der Vorgang abgebrochen. Beispiel:<form onsubmit="if(this.pw1.value != this.pw2.value)
{alert('Passworteingabe unterscheidet sich!');
return false;}">
Name: <input type="Text" name="name"><br>
Paßwort: <input type="Password" name="pw1"><br>
Paßwort: <input type="Password" name="pw2"> (wiederholen)<br>
<input type="Submit">
</form>
Felder verfügbar machen (IE/Moz)
Manchmal sind bestimmte Felder nur in einem gewissen Kontext nutzbar. Bestellt z.B. ein Benutzer etwas aus dem Internet ist es nicht unbedingt notwendig, dass er seine E-Mail-Adresse angibt. Auf der Seite könnte aber gleichzeitig noch eine Checkbox sein mit der er sich für den Newsletter des Herstellers anmelden kann - in diesem Kontext ist eine E-Mail-Adresse natürlich notwendig. Microsofts und die Gecko-Browser bietet dazu die Möglichkeit Formularfelder ein- und auszuschalten. Quasi jedes Feld kann über die disabled-Eigenschaft verfügbar oder eben nicht verfügbar gemacht werden. Beispiel:<input type="Checkbox" name="news" value="news"
onclick="document.getElementById('newsmail').disabled = (this.form.news.checked == false);">
Für den Newsletter anmelden?<br>
E-Mail: <input type="Text" name="mail" id="newsmail" disabled>
Textfelder begrenzen
Bei Textfeldern (textarea-Element) ist es manchmal wünschenswert, dass der Besucher nur eine bestimmte Menge an Zeichen eingeben kann. Da HTML hier keine Lösung bietet muss man sich mit JavaScript aushelfen. Das Prinzip ist ganz einfach: Wird ein neues Zeichen eingegeben (onkeypress-Ereignis) wird geprüft, wieviele Zeichen schon vorhanden sind. Ist eine bestimmte Zahl erreicht wird das Ereignis abgebrochen. Zusätzlich kann dem Besucher gleich noch angezeigt werden wieviele Zeichen er noch eingeben darf. Beispiel:<textarea onkeypress="
this.form.zeichen.value = 160-this.value.length;
if(this.value.length >= 160){return false;}">
Bitte Text eingeben!
</textarea>
<input type="text" value="0" name="zeichen">
Du arbeitest in einer Agentur oder als Freelancer?
Dann wirf doch mal einen Blick auf unsere Software FeatValue.
Über uns

Wir entwickeln Webanwendungen mit viel Leidenschaft. Unser Wissen geben wir dabei gerne weiter. Mehr über a coding project