Formularprüfung
Matthias
- javascript
Achtung, JavaScript Newbie!
Also, ich möchte in einem Formular ein Feld daraufhin prüfen, daß es nicht leer ist und nur Buchstaben, sprich keine Zahlen drin sind.
Dafür hab ich folgenden Code geschrieben, bzw. teilweise kopiert ;-) , der dann wieder zu einer function zusammengefasst wird und diese function wird über den Absende-Button aufgerufen.
function istZahl(wert,laenge)
{
for(i=0;i<laenge;++i)
{
if(wert.charAt(i) >= 0 || wert.charAt(i) <= 9)
return false;
else
return true;
}
}
function Validate_feld_name()
{
if(document.einzug.feld_name.value=="" || istZahl(document.einzug.feld_name.value,document.einzug.feld_name.length))
{
document.einzug.feld_name.focus();
alert("Bitte geben Sie Ihren Namen richtig ein.");
return false;
}
else
return true;
}
Das Checken, ob das Feld leer ist funzt auch, aber nicht das Checken, ob evtl. auch eine Zahl dabei, sobald irgendwas in dem Feld steht, kann ich es ungehindert abschicken. Kann mir jemand sagen woran das liegt und vielleicht auch direkt die Korrektur posten?
Danke,
Matthias
Hallo Matthias,
if(wert.charAt(i) >= 0 || wert.charAt(i) <= 9)
sollte heissen:
if(wert.charAt(i) >= 0 && wert.charAt(i) <= 9)
Der Operator || bedeutet "oder" damit ist Deine Abfrage in jedem Fall ein Treffer, wenn irgendetwas in dem Feld steht.
&& heisst "und" damit hast Du nur noch Treffer, wenn der Eintrag nur aus Zeichen von 0 - 9 besteht.
Gruß Günter
Hallo Günther,
danke erstmal, hab den Operater nu geändert, das Problem besteht aber immer noch genauso weiterhin.
Matthais
Hallo
Matthais
Dreh mal Deine Returnwerte um. Du lieferst "false" bei einem Treffer auf Zahl, fragst aber auf "true" ab.
Gruß
Günter
Hallo Günter!
Leider hat sich immer noch nichts geändert, irgendwie hab ich das Gefühl, da ist noch ein schwerwiegenderer Logikfehler drin.... :-(
Warum sollte ich denn, wenn eine Zahl erkannt wurde, true zurückgeben, ich will doch, daß das Abschicken dann abgebrochen wird, muß ich dafür nicht ein false zurückgeben?
Gruß,
Matthias
Hallo Matthias,
Warum sollte ich denn, wenn eine Zahl erkannt wurde, true zurückgeben, ich will doch, daß das Abschicken dann abgebrochen wird, muß ich dafür nicht ein false zurückgeben?
Du hast die Absicht eine Fehlersituation zu prüfen, prüfst aber auf Korrektheit. Das macht die Logik kompliziert.
Tatsächlich hast Du noch ein paar Probleme in Deiner for-Schleife.
So wie ich das sehe, prüfst Du nur ein Zeichen und beendest dann über return die Schleife.
Du soltest ausserhalb der Schleife eine Variable definieren, in der Du das Ergebnis der Prüfung speicherst. Dafür empfiehlt es sich, die Abfrage so zu gestalten, dass Du auf den Bereich ausserhalb von Zahlen testest. Dann reicht ein negativer Treffer um die Nicht-Korrektheit festzustellen. Wenn Du auf den gültigen Bereich bei jedem einzelnen Zeichen prüfst, musst Du die Anzahl der korrekten Treffer zählen und hinterher mit der Länge vergleichen, um feststellen zu können, ob zwischendurch ein falscher Wert da war.
Überprüfe auch einmal die Bedingung Deiner for-Schleife. length enthält einen um 1 größeren Wert, wenn Du bei Null anfängst zu zählen. Trage ein length-1.
Dann kann ich mich noch undeutlich an meine ersten C-Erfahrungen erinnern. Da war es - man möge mich berichtigen - so, dass bei ++i der Schleifenzähler VOR dem Durchlauf um 1 erhöht wird und bei i++ NACH dem Durchlauf. Das könnte dazu führen, dass Du das erste Zeichen nie prüfst und ein nicht vorhandenes Zeichen am Ende zuviel prüfst.
Bau mal entsprechende Alerts ein, um das zu überprüfen.
Gruß Günter
Vielen Dank nochmal, aber ich habs jetzt endlich gelöst bzw. gelöst bekommen.
CU,
Matthias
PS: Die nächste Frage kommt bestimmt, ich bin noch längst nicht feritg ;-)
Hi,
vielleicht hilft dir das weiter:
http://www.teamone.de/selfhtml/tedf.htm
Hi,
vielleicht hilft dir das weiter:
http://www.teamone.de/selfhtml/tedf.htm
Hi,
von dem Beispiel bin ich ja ausgegangen und es hat nicht funktioniert. Naja, wie gesagt, jetzt funzt es.
Thx,
Matthias