Vinnaren i pepparkakshustävlingen!
  • 1
  • 2
2009-10-30, 12:27
  #1
Medlem
sanobubs avatar
Jag läser till systemvetare på distans och just nu håller vi på med Javascript. Lärarna har förklarat att de pga en planeringsmiss på institutionen inte har tid med föreläsningar och knappt med handledning. Dåligt med tanke på att det är en universitetsutbildning, men så är det. Jag har hittills klarat mig på diverse tutorials på nätet.

Nu till mitt problem: Uppgiften går ut på att göra ett formulär för att registrera medlemskap. Varje inmatning i textboxarna ska valideras när användaren trycker på Lägg till-knappen. Om någon textbox är fel ifylld ska ett felmeddelande visas (efter labeln ovanför aktuell textbox tänkte jag mig). Om allt är rätt ifyllt vill jag att en messagebox ska visas som berättar för användaren att medlemskapet har registrerats. Det kvittar var informationen hamnar när man tryckt på Lägg till, det är inte det uppgiften går ut på.Det här är säkert busenkelt när man vet hur man gör men jag har kört fast och fattar inte vad jag gör fel.

Jag antar att jag behöver skriva något mer för att felmeddelandena ska visas, samt något mer för att få onSubmit att funka. Sen har jag säkert missat något ytterligare *trött*

Mycket tacksam om någon vill hjälpa mig!

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta content="sv" http-equiv="Content-Language" />
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>Registrera medlemskap</title>
<style type="text/css">
.style1 {
margin-bottom: 0px;
}
</style>
</head>

<SCRIPT language="JavaScript">
<!--

function validateForm() /*validering att alla fält är ifyllda*/
{
if (document.f.firstName.value=="")
{
alert("Du måste fylla i ett förnamn.");
return false;
}

else if (form.firstName.value.length>20)
{
alert("Förnamnet får bestå av max 20 tecken.");
return false;
}

else if (document.f.lastName.value=="")
{
alert("Du måste fylla i ett efternamn.");
return false;
}

else if (form.lastName.value.length>20)
{
alert("Efternamnet får bestå av max 20 tecken.");
return false;
}

else if (document.f.age.value=="")
{
alert("Du måste fylla i en ålder.");
return false;
}

else if (document.f.age.value < 18 || document.f.age.value > 45 ) /*validering av inmatad ålder*/
{
alert("Du måste inneha en ålder mellan 18-45 år.");
return false;
}

else if (document.f.userName.value=="")
{
alert("Du måste fylla i ett användarnamn.");
return false;
}

else if (form.userName.value.length>10)
{
alert("Användarnamnet får bestå av max 10 tecken.");
return false;
}

else if (document.f.password.value=="")
{
alert("Du måste fylla i ett lösenord.");
return false;
}

else (document.myForm.password.value.length<=6 >=10) /*validering av antal tecken i lösenordet --- FUNKAR DETTA!? --- */
{
alert("Lösenordet måste vara 6-10 tecken.");
return false;
}

else if (document.f.validatePassword.value=="")
{
alert("Du måste bekräfta ditt lösenord.");
return false;
}

else if (document.f.validatePassword.value==password) /*validering av lösenordsbekräftelse --- FUNKAR DETTA!? --- */
{
alert("Du måste upprepa lösenordet exakt likadant.");
return false;
}

else if (document.f.email.value=="")
{
alert("Du måste fylla i din e-mail.");
return false;
}

else if (!document.f.email.value.isValidEmail())
{
alert("Du måste fylla i en korrekt E-mail adress.");
return false;
}

else
{
function MsgBox (textstring)
{

alert("Ditt medlemskap har registrerats.");
return true;
}


else return true;
}

String.prototype.isValidEmail = function() /*validering att det är en e-mailadress som fyllts i*/
{
return !!this.match(/^([a-zA-Z0-9]{1}([a-zA-Z0-9\.\-\_]*)[a-zA-Z0-9]{1})@([a-zA-Z0-9]{1}([a-zA-Z0-9\.\-\_]*)[a-zA-Z0-9]{1})\.([a-zA-Z]{2,4})$/)
}

//-->
</SCRIPT>

<body>


<div id="layer1" style="position: absolute; width: 786px; height: 640px; z-index: 1; left: 10px; top: 7px">
<div id="layer2" class="style1" style="position: absolute; width: 375px; height: 40px; z-index: 1; left: 3px; top: 1px">
<h1><label id="Label1">Registrera medlemskap</label></h1>
</div>
<div id="layer3" style="position: absolute; width: 426px; height: 17px; z-index: 2; left: 5px; top: 51px">
<h4><label id="Label2">F&ouml;rnamn (max 20 tkn)</label></h4>

</div>
<div id="layer4" style="position: absolute; width: 342px; height: 32px; z-index: 3; left: 3px; top: 92px">

<form method="post" name="firstName">
<input name="firstName" style="width: 229px" type="text" /></form>

</div>
<div id="layer5" style="position: absolute; width: 422px; height: 19px; z-index: 4; left: 4px; top: 123px">
<h4><label id="Label3">Efternamn (max 20 tkn)</label></h4>
</div>
<div id="layer6" style="position: absolute; width: 341px; height: 32px; z-index: 5; left: 2px; top: 165px">
<form method="post" name="lastName">

<input name="lastName" style="width: 228px" type="text" /></form>

</div>
<div id="layer7" style="position: absolute; width: 426px; height: 19px; z-index: 6; left: 5px; top: 198px">
<h4><label id="Label4"> &Aring;lder (18-45 &aring;r)</label></h4>
</div>
<div id="layer8" style="position: absolute; width: 355px; height: 30px; z-index: 7; left: 3px; top: 246px">
<form method="post" name="age">

<input name="age" type="text" /></form>

</div>
<div id="layer9" style="position: absolute; width: 443px; height: 19px; z-index: 8; left: 4px; top: 275px">
<h4><label id="Label5">Anv&auml;ndarnamn (max 10 tkn)</label></h4>
</div>
<div id="layer10" style="position: absolute; width: 339px; height: 26px; z-index: 9; left: -1px; top: 316px">
<form method="post" name="userName">

<input name="userName" style="width: 222px" type="text" /></form>

</div>
<div id="layer11" style="position: absolute; width: 443px; height: 16px; z-index: 10; left: 2px; top: 346px; right: 341px">
<h4><label id="Label6">L&ouml;senord (6-10 tkn)</label></h4>
</div>
<div id="layer12" style="position: absolute; width: 342px; height: 27px; z-index: 11; left: 3px; top: 386px">
<form method="post" name="password">

<input name="password" style="width: 203px" type="text" /></form>

</div>
<div id="layer13" style="position: absolute; width: 443px; height: 15px; z-index: 12; left: 3px; top: 437px">
<h4><label id="Label7">Bekr&auml;fta l&ouml;senord</label></h4>
</div>
<div id="layer14" style="position: absolute; width: 352px; height: 27px; z-index: 13; left: 5px; top: 479px">
<form method="post" name="validatePassword">

<input name="validatePassword" style="width: 201px" type="text" /></form>

</div>
<div id="layer15" style="position: absolute; width: 441px; height: 17px; z-index: 14; left: 5px; top: 506px">
<h4><label id="Label8">E-postadress</label></h4>
</div>
<div id="layer16" style="position: absolute; width: 349px; height: 26px; z-index: 15; left: 3px; top: 549px">
<form method="post" name="email">
<input name="email" style="width: 237px" type="text" /></form>

</div>
<div id="layer17" style="position: absolute; width: 132px; height: 47px; z-index: 16; left: 3px; top: 581px">
<form method="post" name="buttonAdd">
<input name="buttonAdd" style="width: 85px" type="submit" value="L&auml;gg till" onSubmit="return validateForm(this)" "return functionMsgbox(this)" /></form>
</div>

</div>

</body>

</html>
Citera
2009-10-30, 19:38
  #2
Medlem
Povels avatar
Hej!

Har du prövat att validera sidan? Dess HTML är rätt mysko, är jag rädd.
Och varför har du en och en halv miljard formulär på sidan? Använd ett (1) formulär med alla dina inputs, selects etc inuti.

Fortsätt sen, så har du en mycket bättre spelplan att jobba på.

/P
Citera
2009-10-30, 20:53
  #3
Moderator
Protons avatar
För att inte tala om att sidan blir betydligt mer läsbar om du använder CODE eller PHP-taggarna så att indenteringar behålls.
Citera
2009-10-30, 22:14
  #4
Medlem
sanobubs avatar
Citat:
Ursprungligen postat av Povel
Hej!

Har du prövat att validera sidan? Dess HTML är rätt mysko, är jag rädd.
Och varför har du en och en halv miljard formulär på sidan? Använd ett (1) formulär med alla dina inputs, selects etc inuti.

Fortsätt sen, så har du en mycket bättre spelplan att jobba på.

/P
Först tyckte jag inte ditt inlägg var till någon hjälp på min nivå, men nu har jag tack vare det lärt mig göra tabell som jag lagt formuläret i. Dock funkar resten lika dåligt. Html-biten är inte det viktiga till den här uppgiften, så på ett sätt har jag lagt tid på det i onödan men jag får se det som att det alltid är nyttigt att lära sig något nytt.

Min enda räddning nu verkar vara källkod för andra medlemsformulär.
Citera
2009-10-30, 22:16
  #5
Medlem
sanobubs avatar
Citat:
Ursprungligen postat av Proton
För att inte tala om att sidan blir betydligt mer läsbar om du använder CODE eller PHP-taggarna så att indenteringar behålls.

Det har du helt rätt i, och jag är medveten om det. Dock är det inte det mitt problem handlar om.
Citera
2009-10-30, 22:26
  #6
Medlem
Citat:
Ursprungligen postat av sanobub
Det har du helt rätt i, och jag är medveten om det. Dock är det inte det mitt problem handlar om.

Dock blir det ditt problem eftersom ingen vill läsa kod som inte är indenterad, således kommer 99% inte att orka läsa igenom koden
Citera
2009-10-31, 02:15
  #7
Moderator
Protons avatar
Citat:
Ursprungligen postat av ångmaskin
Dock blir det ditt problem eftersom ingen vill läsa kod som inte är indenterad, således kommer 99% inte att orka läsa igenom koden
Alldeles riktigt.

När du nu har städat upp lite i din HTML, kan du inte ta och posta den här då så kan vi kika igenom den? Känns som om det inte är så jättesvårt problem det här rent spontant, men eftersom din HTML inte gick att läsa så funderade jag inte så mkt på problemet....
Citera
2009-10-31, 03:54
  #8
Medlem
Jag började fila lite på nåt exempel åt TS, men så här ett par timmar senare så tror jag minsann att jag byggde den ultimata javascript-valideringen istället. Den här är fan så perfekt den kan bli tror jag. Copy-o pasta och testa själva:
Citera
2009-10-31, 11:13
  #9
Medlem
Povels avatar
Jag bröt ryggen av mig och ögnade igenom koden med våld.

Ta inte illa upp, men det finns en del att fixa!

Citera
2009-10-31, 11:48
  #10
Medlem
Sweetiepies avatar
Lite kommentarer som kanske får det att börja fungera.

1. <form method="post" name="firstName">
Du startar ett nytt formulär för varje input-fält vilket är felaktigt.
Du ska ha 1 <form>-tagg som börjar framför det första input-fältet och slutar längst ner och innesluter din Submit-knapp.

2. Lite standardfel. "<SCRIPT language="JavaScript">" Ska skrivas: <script type="text/javascript"> och onSubmit ska skrivas onsubmit.

3. Om din huvudform är döpt till "f" ( name="f" ) så ska du då skriva i javascriptet:

if (document.f.firstName.value=="")

tror jag. Du har missat "document." på de flesta raderna.

4. Använd Firefox och installera Firebug som har bra inbyggd JavaScript validering, annars kan du inte se vad som är fel i koden.
Citera
2009-10-31, 13:19
  #11
Medlem
sanobubs avatar
Så där, nu har jag installerat firebug och jobbat lite mer med koden. Så här ser det ut nu (förhoppningsvis mer lättläst):

<html>
<head>

</head>

<body>

<script type="text/javascript"><!--

function validateForm()(theForm)
{

if (document.f.firstName.value == "")
{
alert("Du måste ange ett förnamn.");
document.f.firstName.focus();
return (false);
}

else if (document.f.firstName.value.length>20)
{
alert("Förnamnet får bestå av max 20 tecken.");
document.f.firstName.focus();
return false;
}

if (document.f.lastName.value == "")
{
alert("Du måste ange ett efternamn.");
document.f.lastName.focus();
return (false);
}

else if (document.f.lastName.value.length>20)
{
alert("Efternamnet får bestå av max 20 tecken.");
document.f.lastName.focus();
return false;
}

if (document.f.age.value == "")
{
alert("Du måste ange en ålder.");
document.f.age.focus();
return (false);
}

else if (document.f.age.value<18||document.f.age.value>45)
{
alert("Du måste inneha en ålder mellan 18-45 år.");
document.f.age.focus();
return false;
}

if (document.f.userName.value == "")
{
alert("Du måste ange ett användarnamn.");
document.f.userName.focus();
return (false);
}

else if (document.f.userName.value.length>10)
{
alert("Användarnamnet får bestå av max 10 tecken.");
document.f.userName.focus();
return false;
}

if (document.f.passWord.value == "")
{
alert("Du måste ange ett lösenord");
document.f.password.focus();
return (false);
}
/
else if(document.f.password.value<6||document.f.passwor d.value>10)
{
alert("Lösenordet måste vara 6-10 tecken.");
document.f.password.focus();
return false;
}

if (document.f.repeatPassword.value == "")
{
alert("Du måste repetera lösenordet");
document.f.repeatPassword.focus();
return (false);
}

else if (document.f.validatePassword.value==password)
{
alert("Du måste upprepa lösenordet exakt likadant.");
document.f.repeatPassword.focus();
return false;
}

if (document.f.eMail.value == "")
{
alert("Du måste ange en e-postadress.");
document.f.eMail.focus();
return (false);
}
/* --- KAN MAN GÖRA SÅ HÄR MED E-MAILVALIDERING? --- */
if (!document.f.email.value.return !!this.match(/^([a-zA-Z0-9]{1}([a-zA-Z0-9\.\-\_]*)[a-zA-Z0-9]{1})@([a-zA-Z0-9]{1}([a-zA-Z0-9\.\-\_]*)[a-zA-Z0-9]{1})\.([a-zA-Z]{2,4})$/))
{
alert("Du måste fylla i en korrekt E-mail adress.");
document.f.eMail.focus();
return false;
}

function MsgBox (textstring)
{

alert("Ditt medlemskap har registrerats.");
return true;
}


return (true);
}

//--></script>

<form enctype="text/plain" method= post


<table>
<tr>
<td>

<font size=5><strong>Registrera medlemskap</strong></font size><br><br>

Förnamn (max 20 tkn)<br> <input type=text name="firstName" size=15
maxlength=20><br>

Efternamn (max 20 tkn)<br> <input type=text name="lastName" size=15
maxlength=20><br>

Ålder (18-45)<br> <input type=text name="age" size=15
maxlength=20><br>

Användarnamn (max 10 tkn)<br> <input type=text name="userName" size=15
maxlength=10><br>

Lösenord (6-10 tkn)<br> <input type=text name="password" size=15
maxlength=10><br>

Upprepa lösenord<br> <input type=text name="repeatPassword" size=15
maxlength=10><br>

E-post<br> <input type=text name="eMail" size=30
maxlength=50><br><br><br>
/* --- KAN MAN LÄGGA TVÅ ONSUBMIT-FUNKTIONER EFTER VARANDRA SÅ HÄR? --- */
<input type=submit value="Sänd" onsubmit="return validateForm(document)", function MsgBox (textstring)>

</tr>
</td>
</table>
</form>

</body>
</html>

Jag har inte kollat fartys kod än, men ska om det inte var den Povel bröt ryggen över .
Citera
2009-10-31, 14:50
  #12
Medlem
Povels avatar
Citat:
Ursprungligen postat av sanobub
/* --- KAN MAN LÄGGA TVÅ ONSUBMIT-FUNKTIONER EFTER VARANDRA SÅ HÄR? --- */
<input type=submit value="Sänd" onsubmit="return validateForm(document)", function MsgBox (textstring)>

Nej det kan man inte. Läste du det som stod i spoilern i mitt inlägg tro?

ha dessutom onsubmit="return validateStuff();" på <form>-taggen.
Vill du absolut ha handlers på submitknappen, använd
onclick-attributet.

Det skrev jag också i mitt förra inlägg
Citera
  • 1
  • 2

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback