20 - Vormid ja valideerimine PDF Trüki
Kirjutas Mario Metshein   

Kasutajalt andmete saamiseks tuleb veebilehele lisada vorm (form). Javascripti abiga saame antud andmeid töödelda.

Vormist andmete kättesaamine ja kuvamine

Loome pisikese kahe väljaga ja nupuga vormi.

HTML vorm
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
  3. <head>
  4.   <title>Vormid</title> 
  5. </head>
  6. <body>
  7.   <h2>Vormid</h2>
  8.   <form action="#">
  9.     Eesnimi: <input type="text" id="enimi" size="20" /><br />
  10.     Perakonnanimi: <input type="text" id="pnimi" size="20" /><br />
  11.     <input type="submit" value="Saada"/>
  12.   </form>
  13.   <div id="vastusekiht">Siia tuleb vastus...</div>
  14. </body>
  15. </html>

 Vormis on olulised, et igale väljale paneme id. Ja kuna me soovime, et kõik toimuks samal lehel, siis action="#".

Vormist saadud info töötlemiseks lisame javascripti funktsiooni tervitus() html lehe päisesse.

funktsioon tervitus()
  1. ...
  2. <head>
  3.     <script type="text/javascript">
  4.     function tervitus(){
  5.       //valime kuhu kuvame teksti
  6.       document.getElementById("vastusekiht").innerHTML="Tere "+
  7.       //tekstile lisame html vormist id järgi saadud info
  8.       document.getElementById("enimi").value+
  9.       " "+
  10.       document.getElementById("pnimi").value+
  11.       "!"
  12.       ;
  13.     }
  14.   </script>
  15. </head>
  16. ...

Kui hetkelveebilehte vaadata, siis nupule vajutusega midagi ei toimu. Selleks, et funktsiooni käivitada, tuleb nupule juurde lisada sündmus funktsiooni nimega.

onclick
  1. <input type="submit" value="Saada" onclick="tervitus()"/>

Nüüd kui väljad täita ja nupule vajutada, siis väljastatakse teade Tere Mari Maasikas!

Arvud ja vormid

Eelmine funktsioon töötab päris ilusti. Aga kujutame ette, et meil on vaja kasutada kahte välja, et leida nende summa. Kui hetkel proovida liita arvud 2 ja 3, siis kuvatakse meile vastus 23, mis ei tundu olevat õige :).

Selleks, et saaks liita tuleb antud andmed teisendada numbriteks funktsioonidega parseFloat (murdarv) või parseInt (täisarv).

liida()
  1. function liida(){
  2.       document.getElementById("vastusekiht").innerHTML=
  3.       parseFloat(document.getElementById("enimi").value)+
  4.       parseFloat(document.getElementById("pnimi").value)
  5.       ;
  6.     }

Teiste tehetaga probleeme ei tohiks olla.

Loendid ja masiivid

Vaatame kuidas kasutada loendeid ja siduda neid masiiviga. Loome hakatuseks tavalise loendi id="tooted"

loend id="tooted"
  1. <body>
  2.   <h2>Loend</h2>
  3.   <form action="#">
  4.     <select id="tooted">
  5.       <option>Eesti Leib</option>
  6.       <option>Läti Sai</option>
  7.       <option>Soome Moos</option>
  8.     </select>
  9.   </form>
  10.   <div id="vastusekiht">Siia tuleb vastus...</div>
  11. </body>

 

Kuna nuppu ei ole, siis võime sündmuse lisada siis, kui kasutaja on teinud muutuse valikus. 

onChange()
  1. <select id="tooted" onChange="naita();">

Loendis olead kirjed käituvad kui massiivi elemendid ning selle leiab selectedIndex abil. 

loend
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
  3. <head>
  4.   <title>Loend</title> 
  5.     <script type="text/javascript">
  6.     function naita(){
  7.       document.getElementById("vastusekiht").innerHTML=
  8.       document.getElementById("tooted").selectedIndex;
  9.     }
  10.   </script>
  11. </head>
  12. <body>
  13.   <h2>Loend</h2>
  14.   <form action="#">
  15.     <select id="tooted" onChange="naita();">
  16.       <option>Eesti Leib</option>
  17.       <option>Läti Sai</option>
  18.       <option>Soome Moos</option>
  19.     </select>
  20.   </form>
  21.   <div id="vastusekiht">Siia tuleb vastus...</div>
  22. </body>
  23. </html>

 Loome massiivi, kust loendist saadud indeksi abil väljastametoote hinna.

naita()
  1. <script type="text/javascript">
  2.     var hind= new Array(5.75, 6.17, 3);
  3.  
  4.     function naita(){
  5.       document.getElementById("vastusekiht").innerHTML=
  6.       hind[document.getElementById("tooted").selectedIndex];
  7.     }
  8.   </script>

Andmete valideerimine

Veebilehe  täidetud vormi andmed saadetakse serverisse, kus andmeid kontrollitakse ja töödeldakse. Enne vormi sisestatud andmete serverisse saatmist tuleb neid kontrollida, et vältida serveri koormamist ebaõigete päringutega. Kontroll aitab vältida ka asjatud ajakulu, mis tekib andmete edasi-tagasi saatmisestnende paranamise tõttu.

Siinkohal tuleb appi Javascript, mille abil saame andmeid kontrollida. Kontrolli saab teostada mitmel viisil:

  • kontrollida andmeid kohe pärast nende lahtrisse sisestamist, tuues vea puhul ekraanile teatekasti või saata kursor tagasi lahtrisse
  • kontrollida andmeid pärast kõigi nõutud lahtrite täitmist ja tuua alles siis valesti sisestatud  andmete puhul ekraanile kast veateatega
Andmete kontrollimiseks on soovitav luua funktsioon. Kuna andmed edastatakse nupuga submit, saab kontrollimisfunktsiooni käivitamiseks kasutada draiverit onSubmit.

Loome vormi jaoks Javascripti koodi, mis kontrollib ega kastid pole tühjaks jäetud ja sisaldavad nõutud asju. Loome lihtsa vormi, kuhu on vaja lisada tekst ja 11-kohaline number. Vormi nimeks saab input ja nupule vajutades käivitatakse funktsioon kontrolli.

form
  1. <form name="input" onSubmit="return kontrolli();">
  2.   Nimi: <input type="text" name="nimi" size="20" /><br />
  3.   Isikukood: <input type="text" name="ik" size="12" maxlength="11" /><br />
  4.   <input type="submit" value="Saada" />
  5. </form>

Kui vormi sisaldav veebileht laaditakse, siis oleks hea, kui kursor oleks aktiivne kohe esimeses lahtris. Kasutame selleks meetodid focus() ning lisame esimesse <body> silti.

  1. <body onLoad="document.input.nimi.focus()">

Kontrollfunktsiooni lisame <head> siltide vahele. Teeme nii, et kontrollime ega nime lahter pole tühjaks jäetud. Kuna vigu võib olla rohkem, siis soovime, et kõik veateated tuleks korraga ekraanile. Selleks loome muutuja teade. Siis kontrollime kas teise kasti sisestatud sümbolite pikkus on 11 tähemärki ja siis kas tegemist on ikka numbritega.

Lõpus toome ekraanile teate, kus on kõik veateated.

andmete valideerimine
  1. <script type="text/javascript">
  2. function kontrolli(){
  3.   var teade="";
  4.   if(document.input.nimi.value.length == 0)
  5.     {
  6.       teade=teade+"Nimi jäi sisestamata!\n";
  7.     }
  8.   if(document.input.ik.value.length < 11)
  9.     {
  10.       teade=teade+"Isikukoodi pikkus on 11 numbrit";
  11.     }
  12.   else if(isNaN(document.input.ik.value))
  13.     {
  14.       teade=teade+"Isikukood tohib sisaldada ainult numbreid";
  15.     }
  16.    
  17.   if(teade.length > 0)
  18.     {
  19.       alert(teade);
  20.       return false;
  21.     }
  22.   else
  23.     {
  24.       return true;
  25.     }
  26. }
  27. </script>

 

 Pisike emaili kontrollimise kood

emaili valideerimine
  1. <html>
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4.   <script type="text/javascript">
  5.     function validate_email(field,alerttxt)
  6.     {
  7.     with (field)
  8.       {
  9.       apos=value.indexOf("@");
  10.       dotpos=value.lastIndexOf(".");
  11.       if (apos<1||dotpos-apos<2)
  12.         {alert(alerttxt);return false;}
  13.       else {return true;}
  14.       }
  15.     }
  16.     function validate_form(thisform)
  17.     {
  18.     with (thisform)
  19.       {
  20.       if (validate_email(email,"Email pole sisestatud õigesti!")==false)
  21.         {email.focus();return false;}
  22.       }
  23.     }
  24.     </script>
  25. </head>
  26. <body>
  27.     <form action="#" onsubmit="return validate_form(this);" method="post">
  28.       <p>Email: <input type="text" name="email" size="30"></p>
  29.       <p><input type="submit" value="Saada"></p>
  30.     </form>
  31. </body>
  32. </html>
 HARJUTUS 10

 Koosta kasutaja registreerimise vorm:
- nimi
- parool
- sünniaeg
- email

Koosta andmete valideerimine, kus kontrollid et mitte üksi väli ei jääks tühjaks, parool oleks piisava pikkusega (min 6 märki), sünniaeg õiges vahemikus ning email õige.

 
< Järgmine   Eelmine >

Lingid

ooo.jpeg getnotepad.jpg getsketchup.jpg

Viimati lisatud failid

HKHK esitlusmall
2009-09-05
Small Icons - 700tk
2008-06-30
Flag Icons
2008-06-30

Menüü

Foorum
Galerii