1:
Kod:
function validateForm()(theForm) { /*code*/ }
Så deklarerar man inte en funktion som tar ett argument som heter
theForm
Så här skall det se ut:
Kod:
function validateForm (theForm) { /*code*/ }
2:
När du deklarerar funktionen
MsgBox så gör du det inuti funktionen
validateForm. Det finns ingen bra anledning till det här. Dessutom får den en parameter
textstring, som inte används. Och till sist så returnerar den alltid
true, vilket är rätt meningslöst.
Fixandet av allt detta skulle leda till en separat funktion (utanför
validateForm) som skulle se mer ut så här:
Kod:
function MsgBox (textstring) {
alert(textstring);
}
.. viket bara är alert av en text, som man ju lika gärna kan göra utan en separat funktion:
Kod:
alert('Ditt medlemskap har registrerats.');
// Detta är ju den enda texten som alertas nånstans, vad jag har kunnat se
3:
Kod:
onSubmit="return validateForm(this)" "return functionMsgbox(this)"
Nu sitter "onsubmit" på formuläret, vilket är rätt. Men onsubmit i det här faller blir bara "return validateForm(this)".
Det inom det andra citationstecknen-paret är helt orelaterat. onsubmit kan endast ha ett värde så att säga.
Vill du kalla på
MsgBox-funktionen så måste du
- stava rätt ("MsgBox", inte "Msgbox")
- inte skriva "function" innan. Det gör man när man deklarerar (skapar) funktionen, inte när man använder den.
- skicka med en textsträng som du vill ha alertad. "this" kommer inte att vara något du vill ha alertat här. "this" är själva formuläret (se nedan).
- kalla på den från ett ställe där det GÅR att kalla på funktioner: Tex. i onsubmithandlern, eller i en annan funktion.
En idé skulle vara att kalla på den i onsubmit om valideringen går bra:
Kod:
onsubmit="if (validateForm(this)) {MsgBox('Ditt medlemskap har registrerats.');return true;} else {return false;}"
En annan idé är att kalla på den sist i
validateForm, om allt har gått ok. Då får man tänka på följande när det gäller onsubmit: returnerar du
false i den, kommer formuläret
inte att skickas. Det är därför man returnerar
false när man t.ex. upptäckt felifyllda fält. Returnerar man
true skickas formulärdatat till det som står i form-taggens action-attribut, t.ex. så här:
Kod:
<form action="formHandler.jsp" onsubmit="return validateForm(this);">
<!-- Om validateForm returnerar true skickas data till formHandler.jsp, annars skickas inget. -->
Därför måste man i "idé 2-fallet" se till att returnera
false om nåt är fel, eller köra MsgBox('Ditt medlemskap har registerats.') och returnera
true om allt såg bra ut.
4:
Om du fixat punkt 1, så tar funktionen
validateForm emot en parameter som heter
theForm. När man i
onsubmit på form-taggen kallar på
validateForm och skickar med "this", så kan man ju fråga sig vad "this" är. Det är just själva formuläret, det! Hade man skickat med "this" från en submitknapp hade det varit knappen som skickats med. Ok?
Eftersom du skickar med formuläret in i funktionen så hamnar den i parametern
theForm, och därför kan du använda den överallt där du skriver
document.f. Så här:
Kod:
if (!theForm.lastName.value) { /*complain*/ } else if (theForm.lastName.value.length>20) { /*complain length*/ }
Det är en ganska bra idé att göra så här, inte minst eftersom det gör det lätt att byta namn på formuläret (man behöver inte ändra en massa rader i funktionen, eftersom man helt enkelt skickat med formuläret. Det behöver inte ens ha ett namn!)
Hoppas att detta hjälper! Risigt av skolan om de lämnat er vind för våg så att säga.
Hälsningar
/Povel