/ Forside / Teknologi / Udvikling / Java Scripts / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java Scripts
#NavnPoint
molokyle 5410
Klaudi 2799
smorch 2439
kim 1360
Harlekin 1134
bentjuul 984
gibson 800
severino 695
Random 675
10  konsulent.. 626
Fejl i validering...
Fra : Lasse Madsen


Dato : 29-02-04 10:43

Der er et fel i mit validerings-script, idet den alligevel går
videre, selvom der er fejl deri, og den advarer om det...

En af HTML-filerne ser sådan her ud:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<!-- Minus AutoDato -->
   <title>Spørgsmål...</title>
<meta name="Generator" content="Stone's WebWriter 4">
<meta name="Author" content="Steen Hjelmstrand" />
<link rel="stylesheet"
href="http://jul2.users.whitehat.dk/default.css" type="text/css"
/>
</head>
<body>

<script type="text/javascript"
src="http://jul2.users.whitehat.dk/copyright.js">
<script type="text/javascript"
src="http://jul2.users.whitehat.dk/e-mailadresse_spoergsmaal.js">
</script>

<h1>Har du et sp&oslash;rgsm&aring;l, som du &oslash;nsker svar
p&aring;?</h1>

<div style="text-align:center">Udfyld nedenst&aring;ende hvis du
har et sp&oslash;rgsm&aring;l:</div>

<form action="php/spoergsmaal.php" method="post"
onsubmit="validering();return false;">

Navn:
<br/>
<input size="69" maxlength="70" name="navn">

<br/>
E-mailadresse:
<br/>
<input size="69" maxlength="70" name="email">

<br/>
Sp&oslash;rgsm&aring;l:
<br/>
<input size="69" maxlength="2700" name="spoergsmaal" >

<br/><br/><input type="submit" value="Send">
<input type="reset" value="Nulstil">
</form>

</body>
</html>


Validerings-filen ser sådan ud:

<!-- Start

function validering()
{
error = 0;

placering=0;
tekst=(document.forms[0].email.value).toLowerCase();
placering=tekst.indexOf("@"); if(tekst ==""){
alert ("Indtast en e-post adresse i tekst feltet");
error = 1;
}
else{
tegn=tekst.indexOf(" "); if(tegn!=-1){
alert ("Ingen mellemrum i adressen");
error = 1;
}
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 = 1;
}
else{
if (placering<1 || tekst.length<=(placering+1)){
alert ("E-post adressen er forkert");
error = 1;
}
}
}
}
if((document.forms[0].navn.value=='') && (error==0))
{      
alert('Du skal udfylde feltet med dit navn!');
document.forms[0].navn.focus();
error = 1;      
}

if((document.forms[0].spoergsmaal.value=='') && (error==0))
{      
alert('Du skal udfylde feltet med spørgsmålet!');
document.forms[0].spoergsmaal.focus();
error = 1;      
}

if(error == 0)
document.forms[0].submit();
}

// Slut -->


Er der nogen, der kan se fejlen deri???

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
Lasse Reichstein Nie~ (29-02-2004)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 29-02-04 14:01

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.'

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408926
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste