Funktion will funktionieren
Spilli96
- javascript
0 SorgenKind Mech0 Spilli96
0 Der Martin0 MudGuard
0 Encoder
hallo ich wollte ein script zur formularüberprüfung schreiben und es wird auch die funktion aufgerufen aber mehr nicht und formular wird einfach abgeschickt auch wenn es falsch ist.
hier mal der code:
function checkForm() {
var strError="";
//username
if (document.regis_form.username.value == "")
strError += "-kein Name\n";
if (20 < document.regis_form.username.value.length)
strError += "-Name: max. 20 Zeichen\n";
//password
if (document.regis_form.password.value == "")
strError += "-kein Passwort\n";
if (30 < document.regis_form.password.value.length)
strError += "-Passwort: max. 30 Zeichen\n";
//email
if (!validEmail(document.regis_form.email.value))
strError += "-keine gültige E-Mail Adresse\n";
//ausgabe
if (strError.legth > 0 ) {
document.regis_form.error.write(strError);
return false;
}
}
function validEmail(email) {
var strReg = "^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+\.+([a-zA-Z0-9]{2,4})+$";
var regex = new RegExp(strReg);
return(regex.test(email));
}
if (strError.legth > 0 ) {
huhu, hier bitte einmal krrigieren, da es legth nicht gibt ;)
ansonsten kopier mal das form rein, dann kann man einfacher testen und anhand der browser-fehlermeldungen besser schauen woran es liegt ;)
if (strError.legth > 0 ) {
huhu, hier bitte einmal krrigieren, da es legth nicht gibt ;)
danke aber das hat es noch nicht zum funktionieren gebracht
ansonsten kopier mal das form rein, dann kann man einfacher testen und anhand der browser-fehlermeldungen besser schauen woran es liegt ;)
<form onsubmit="return checkForm();" name="regis_form" method="post" action="regis.php">
<table id="regis_form">
<tr>
<td>
<div name="error"></div>
</td>
</tr>
<tr>
<td>
<label for="username">Username</label>
<br/>
<input id="username" name="username"/>
</td>
</tr>
<tr>
<td>
<label for="password">Passwort</label>
<br/>
<input id="password" name="password" type="password"/>
</td>
</tr>
<tr>
<td>
<label for="email">E-Mail</label>
<br/>
<input id="email" name="email"/>
</td>
</tr>
<tr>
<td>
<input id="regis_button" type="submit" name="submit" value="Registrieren"/>
</td>
</tr>
</table>
</form>
<form onsubmit="return checkForm();" name="regis_form" method="post" action="regis.php">
<table id="regis_form">
also erstens vergibst du regis\_form einmal als id und einmal als name bei 2 verschiedenen elementen, das führt zwar nicht zwangsläufig zu problemen, würde ich aber strikt vermeiden
weiterhin liegt der fehler hier:
document.regis\_form.error.write(strError);
diese zeile führt zu einem fehler, denn der browser weiß nichts damit anzufangen
erstens gibt es 2 objekte mit dem namen / id, zweitens bin ich mir bzgl des writes ncht so sicher
nimm:
<div id="error\_field"></div>
und
document.getElementById("error\_field").innerHTML=strError;
nur als beispiel, und schon funzt es ;)
Danke
ich bin noch neu auf dem gebiet aber jetzt klappt alles.
Spilli96
Danke
ich bin noch neu auf dem gebiet aber jetzt klappt alles.Spilli96
macht ja nix, mir wurde hier auch schon so oft geholfen, und niemand (soweit ich mich erinnern kann) verurteilt hier jemanden, weil er mit etwas gerade erst anfängt - wir alle sind auf verschiedenen gebieten anfänger, und wenn ich das richig beurteile, ist das forum ja auch dafür gedacht ;)
LG
Hi,
<form onsubmit="return checkForm();" name="regis_form" method="post" action="regis.php">
<table id="regis_form">
zur Mehrdeutigkeit der name- und id-Attribute hat Mech schon etwas gesagt. Theoretisch ist die Dopplung hier zwar erlaubt, ich weiß aber nicht, ob das alle relevanten Browser auch so sehen. Wozu hat die Tabelle hier überhaupt eine ID?
<div name="error"></div>
Ein div-Element hat kein name-Attribut. Und es ist kein Formularelement. Das sind schon zwei Gründe, warum es nicht mit forms.regis_form.error ansprechbar ist. Daher gibt es bei dieser Zeile einen Fehler:
document.regis_form.error.write(strError);
Den zweiten Fehler, nämlich dass das div-Element auch keine write-Methode hat, stellt der Browser gar nicht mehr fest, weil er vorher aufgibt. Und weil dein onsubmit-Eventhandler mit einem Fehler abbricht, kann er auch das Absenden des Formulars nicht verhindern.
Ciao,
Martin
Hallo,
if (20 < document.regis_form.username.value.length)
eigenwillige Schreibweise - meist schreibt man den zu prüfenden Ausdruck links, die Konstante rechts. So wie du es formulierst, ist es zwar auch richtig, aber ungewohnt.
document.regis_form.error.write(strError);
Was ist das denn?!
return false;
Und wie wird die Funktion an das Formularobjekt gebunden?
function validEmail(email) {
var strReg = "^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+.+([a-zA-Z0-9]{2,4})+$";
var regex = new RegExp(strReg);
return(regex.test(email));
}
Du prüfst sehr scharf. In Mailadressen ist wesentlich mehr erlaubt, als du glaubst.
Ciao,
Martin
Hi,
if (20 < document.regis_form.username.value.length)
eigenwillige Schreibweise - meist schreibt man den zu prüfenden Ausdruck links, die Konstante rechts. So wie du es formulierst, ist es zwar auch richtig, aber ungewohnt.
Vermeidet aber z.B. beim Operator ==, daß das Vergessen des 2. = durchrutscht, denn 42 = answertoquestionoflivetheuniverseandeverything ergibt einen Fehler, während answertoquestionoflivetheuniverseandeverything = 42 keinen ergibt.
cu,
Andreas
Hallo,
if (20 < document.regis_form.username.value.length)
eigenwillige Schreibweise - meist schreibt man den zu prüfenden Ausdruck links, die Konstante rechts. So wie du es formulierst, ist es zwar auch richtig, aber ungewohnt.
Vermeidet aber z.B. beim Operator ==, daß das Vergessen des 2. = durchrutscht, denn 42 = answertoquestionoflivetheuniverseandeverything ergibt einen Fehler, während answertoquestionoflivetheuniverseandeverything = 42 keinen ergibt.
ja, der Vorteil ist mir bekannt und bewusst; mir fällt es trotzdem schwer, mich an diesen eigentlich sinnvollen Stil zu gewöhnen. ;-)
Ciao,
Martin
Deine Funktion gibt nirgends true zurück, geht das dann wirklich wenn du die bisher besprochenen Sachen korrigierst?
Deine Funktion gibt nirgends true zurück, geht das dann wirklich wenn du die bisher besprochenen Sachen korrigierst?
jup geht, da true der standardwert ist
LG
jup geht, da true der standardwert ist
Ok aber sauber programmiert ist es jedenfalls nicht. Viel zu viel Denkarbeit beim Versuch den Code zu verstehen.