Lasse Madsen <Lasse@hippie.dk> writes:
> Der er et fel i mit validerings-script, idet den alligevel går
> videre, selvom der er fejl deri, og den advarer om det...
> <meta name="Author" content="Steen Hjelmstrand" />
Du skal ikke slutte med /> når din DOCTYPE er HTML, kun hvis den
er XHTML.
> <form action="php/spoergsmaal.php" method="post"
> onsubmit="validering();return false;">
Du returnerer altid false her, så hvis koden virkede så ville
man altid blive forhindret fra at submitte. At man alligevel
submitter betyder at validering-funktionen begår en fejl, som
afbryder udførslen. (Jeg ser nu at du har ...form.submit() i koden.
Det er en omvej at gå, når du blot kan lade formen submitte som
den plejer ved ikke at returnere false!)
Det typiske at skrive her er:
onsubmit="return validering(this);"
Det sender formen med så man ikke behøver slå den op
("document.forms[0]" bliver bare til "form", som er argumentet til
validering-funktionen)
> <!-- Start
Der skal ikke være HTML-kommentarer i en Javascript-fil (eller for den
sags skyld i et script tag - grunden til at lave dem der forsvandt for
mange år siden).
> function validering()
> {
> error = 0;
lav din variabel lokal, ellers er den global.
var error = 0;
Det gælder generelt.
Resten kunne skrives mere letlæseligt (det er pænest at begynde
if-sætninger først på linjen, så det er nemt at se hvilke blokke der
slutter hvor). Fejlen er at du mangler en slut-tuborg ("}") et
sted. Men hvor?
Du kan bruge JSLint til at validere dit script. Den er meget streng
med hvad den tillader, men så er det tilgengæld også både rigtigt
og let at læse :)
Her er dit script efter at jeg har smukkificeret det:
---
function validering(form) {
var error = false;
var tekst = form.elements['email'].value.toLowerCase();
if (!tekst) { // tom eller udefineret
alert ("Indtast en e-post-adresse i tekst-feltet");
error = true;
} else {
if (tekst.indexOf(" ") != -1){
alert("Ingen mellemrum i adressen");
error = true;
} else {
if (tekst.indexOf("æ")!=-1 ||
tekst.indexOf("ø")!=-1 ||
tekst.indexOf("å")!=-1 ||
tekst.indexOf("Æ")!=-1 ||
tekst.indexOf("Ø")!=-1 ||
tekst.indexOf("Å")!=-1 ||
tekst.indexOf(";")!=-1 ||
tekst.indexOf(",")!=-1) {
alert("Der er ulovlige tegn i adressen.");
error = true;
} else {
var placering = tekst.indexOf("@");
if (placering<1 || tekst.length == (placering+1)) {
alert ("E-post adressen er forkert");
error = true;
}
}
}
}
if (!form.elements['navn'].value && (!error)) {
alert("Du skal udfylde feltet med dit navn!");
form.elements['navn'].focus();
error = true;
}
if (!form.elements['spoergsmaal'].value && (!error)) {
alert("Du skal udfylde feltet med spørgsmålet!");
form.elements['spoergsmaal'].focus();
error = true;
}
return !error;
} // <== den slut-tuborg mangler
---
Da jeg var færdig med at smukkificere, så kunne jeg se på indenteringen
at der manglede en slut-tuborg til sidst.
Jeg lavede "error" om til en boolean, fordi det er det du egentlig bruger
den som, og sproget har true og false indbygget.
Jeg bruger elements-collection'en til at tilgå form-kontrollerne. Det har
den fordel at være W3C DOM-korrekt, så det er helt sikkert på at virke.
Og husk at kalde valideringen som
onsubmit="return validering(this)"
på form-elementet.
> Er der nogen, der kan se fejlen deri???
Du kan også sende det igennem JSLint nu :)
Den fortæller bl.a. hvilke globale variable man har, hvilket kan bruges
til at fange at man har skrevet et variabelnavn forkert.
/L
--
Lasse Reichstein Nielsen - lrn@hotpop.com
DHTML Death Colors: <URL:
http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'