Till Startsidan
JavaScript.nu / JavaScript-kurs / Formul�r med JavaScript och indexOf()

L�R DIG SPR�KET JAVASCRIPT
Formul�r med JavaScript och indexOf()

Nu ska du l�ra dig lite andra saker i JavaScript som �r v�ldigt bra n�r man g�r formul�r, vilket jag f�ruts�tter att du kan om du ska l�sa detta kapitel, annars kan du l�ra dig det h�r. Givetvis kan du �ven helt enkelt hoppa �ver detta kapitel om du inte vill l�ra dig att skapa formul�r.

Om du har, t.ex. en g�stbok, men inte vill att folk ska skriva in sig med ett speciellt namn (t.ex. ditt), s� kan du hindra dem fr�n att skriva in sig med det namnet med ett JavaScript (vad annars :) ).

L�t oss s�ga att du har en g�stbok hos GuestWorld, d� har du dessa f�lt. �ven om du inte har din g�stbok d�r s� kan du l�tt f�lja med. Att jag tagit GuestWorld som exempel betyder INTE att jag f�ruts�tter att du kan n�got som helst om dem, dessa f�lt skulle allts� kunna vara precis vilka f�lt som helst. Jag har valt Guestworlds f�lt just f�r att de inneh�ller de sorts f�lt vi ska titta p�:

<!-- Formul�rets start --------------------------------------------------------->
<form method="post"
name="LiveFORM" action="http://din_planet.guestworld.com/wgb/wgb.dbm?owner=din_g�stboks_namn">

<!-- G�mda F�lt ----------------------------------->
<input type="hidden" name="copyright"
value="Copyright (C) 1996,1997 Patil Systems, Inc.">
<input type="hidden" name="verno" value="1.7">


<!-- Namn --------------------------------->
<input name="fullname" size=30 maxlength=60>


<!-- E-mail-adressen ------>
<input name="email" size=30>


<!-- Hemsidans adress ------------------------>
<input name="homepage" value="https://" size=30>


<!-- Hemsidans namn ------------------------>
<input name="hometitle" size=30 maxlength=60>


<!-- Vart man bor ---------->
<input name=location size=30>


<!-- Bes�karens kommentarer -------------------------->
<TEXTAREA NAME="lfgbcomment" COLS=30 ROWS=8></textarea>


<!-- Submit-knapp -->
<input type=submit>


</FORM>
L�t oss nu s�ga att du inte vill att n�gon ska kunna skriva in sitt namn som "G�ran Persson". D� f�r du ta till ett script som l�ser av rutan d�r man skriver in sitt namn och ser till att det inte st�r G�ran Persson d�r innan det skickar iv�g formul�ret till GuestWorld (eller vart man nu har sin g�stbok). Observera att s� gott som alla g�stb�cker kan "signeras" fr�n en annan sida �n din, s� en bes�kare kan signera din g�stbok fr�n sin h�rddisk med vilka uppgifter (= ifyllda f�lt) som helst. Skulle du inte vilja detta f�r du ta till cgi och g�ra dig en egen g�stbok, vilket vi inte alls ska f�rdjupa oss i (du �r ju trots allt h�r f�r att l�ra dig JavaScript).
N�ja, tillbaka till formul�ret och att man inte fick fylla i G�ran Persson som sitt namn.

Till att b�rja med s� g�r vi s� att s� fort man f�rs�ker skicka formul�ret s� startas en funktion, den som ska avsl�ja vad man f�r och inte f�r skriva i formul�ret.
Det g�r vi genom att s�tta in onSubmit="return funktionens_namn()" i FORM-taggen (detta �r ju en motsvarighet till OnMouseOver, OnMouseOut etc. fast detta reagerar d� man "submitar" ett formul�r).
Resultatet blir d�:
<form method="post" onSubmit="return funktionens_namn()" name="LiveFORM" action="http://din_planet.guestworld.com/wgb/wgb.dbm?owner=din_g�stboks_namn">

S� fort n�gon trycker p� submit-knappen som finns i denna "FORM" s� startar funktionen funktionens_namn(). Att vi har "return" f�rst beror p� att vi ska kunna avbryta skickandet av formul�ret om vi vill med "return false" (nedan l�r du dig vad det �r).
Om du vill starta en helt vanlig funktion n�r man "submitar" formul�ret s� skriver du bara onSubmit="funktionens_namn()".

Nu �r allt i formul�ret f�rdigt, nu ska du l�ra dig vad vi ska skriva i funktionen funktionens_namn() som g�r formul�ret till det vi vill.

Vi b�rjar med att skriva detta:

<SCRIPT LANGUAGE="JavaScript">
<!--
function funktionens_namn()
{
        if (document.LiveFORM.fullname.value == "G�ran Persson" || (document.LiveFORM.fullname.value == "g�ran persson") || (document.LiveFORM.fullname.value == "G�RAN PERSSON"))
        {
        alert("L�gnare d�r! Du heter inte alls " + document.LiveFORM.fullname.value + "");
        }
}
//-->
</SCRIPT>
Vi b�rjar med att g�ra funktionen (vad annars) och sedan g�r vi en "if", d�r vi s�ger att om document.LiveFORM.fullname.value �r detsamma som de v�rden vi gett (G�ran Persson, g�ran persson och G�RAN PERSSON (eftersom JavaScript �r k�nslig med StOr oCh lItEn bokstav s� har vi graderat oss med alla "G�ran Persson"-varianter)) s� h�nder det som st�r mellan { och }. Allt detta har du l�rt dig, f�rutom vad texten document.LiveFORM.fullname.value betyder.

document.LiveFORM.fullname.value har som vi ser 4 delar.
Document s�ger att det �r i v�rat document (.shtml(l)-dokument) som saken ska h�nda i.
LiveFORM s�ger att formul�ret som avses heter liveFORM (det st�r i FORM-taggen).
Fullname s�ger att namnet p� f�ltet, knappen eller vad vi nu avser (i v�rt fall ett vanligt INPUT-f�lt) heter fullname.
Value s�ger till webbl�saren att vi menar v�rdet (= det som st�r i f�ltet).

Med denna information tittar webbl�saren (p� uppdrag av funktionen) p� v�rat dokument efter formul�ret liveFORM och f�ltet fullname med v�rdet G�ran Persson, g�ran persson eller G�RAN PERSSON.

Nu kan vi hur l�tt som helst s�tta in attributen maxlength i INPUT-f�lt s� att man inte kan fylla i mer �n ett visst antal tecken, men detta g�r ju inte med TEXTAREA-f�lten, d�rf�r kan du, om du inte vill ha f�r l�nga inl�gg i g�stboken skriva...

        if (document.LiveFORM.lfgbcomment.value.length > 60)
        {
        alert("Ditt inl�gg f�r inte vara l�ngre �n 60 tecken, ditt inl�gg �r p� " + document.LiveFORM.lfgbcomment.value.length + " tecken");
        }
...i funktionen, f�r d� reagerar v�rt script om ett inl�gg �r under 60 tecken (f�r den som inte kan alltf�r mycket i matte s� betyder < "�r mindre �n", = "�r lika med" och > "�r mer �n").
Observera att vi skriver exakt samma sak nu som f�rr, fast nu har vi med length (eng. l�ngd) efter value (plus att formul�rets namn har �ndrats fr�n fullname till lfgbcomment s� att scriptet tittar i r�tt f�lt), som ber�ttar att v�rdet vi vill ha �r l�ngdens v�rde, inte v�rdet som st�r i f�ltet.
�ndrar vi > till < s� f�r antalet tecken i f�ltet lfgbcomment inte vara mindre �n 60 tecken.

En viktig sak att komma ih�g �r att trots att scriptet reagerar s� kommer formul�ret att skickas iv�g, men f�r att hindra det s� g�r vi s� att n�r man skickar iv�g formul�ret s� startar scriptet - precis som vanligt - men om scriptet regerar s� avbryts processen, och formul�ret skickas inte iv�g.
Detta g�r du genom att skriva return false; s� avslutas scriptet. Orsaken till att det inte skickas �r att det i "onSubmit" stod "return" och d�refter funktionens namn. N�r man har med return xxx (xxx = false i v�rt fall) i scriptet s� kommer xxx att "returneras" (= false returneras) s� att det st�r onSubmit="return false". F�r att formul�rets ska skickas s� f�r det inte vara "false", det m�ste vara "true". Att det ska vara true beh�ver du inte t�nka p�, det blir true om annat inte anges.

Ett exempel p� detta �r s� h�r (observera att det �r samma script som f�rut fast detta script avslutar allt om man har mindre �n 60 tecken i f�ltet lfgbcomment):

        if (document.LiveFORM.lfgbcomment.value.length > 60)
        {
        alert("Ditt inl�gg f�r inte vara l�ngre �n 60 tecken, ditt inl�gg �r p� " + document.LiveFORM.lfgbcomment.value.length + " tecken");
        return false;
        }
Nu avslutas scriptet av return false; om man har �ver 60 tecken i f�ltet lfgbcomment, om man inte har det s� kommer ju allt mellan { och } ignoreras.


Ett av de mest anv�nda funktionerna �r n�r man skriver:

        if ((document.LiveFORM.email.value.indexOf("@") == -1) ||
            (document.LiveFORM.email.value == ""))
        {
        alert("En e-mail-adress �r t.ex. s� h�r:\n namn@bolag.com\n Var god och fyll i eran e-mail");
        return false;
        }
Att min "if-rad" nu �r p� 2 rader spelar ingen som helst roll, jag skulle ha kunnat ha som jag brukar p� en l�ng rad, men nu har jag valt att ha p� 2 rader (l�gg m�rke till att "||" (Alt Gr + <) �ven finns h�r).
Min andra if-rad �r precis som du ser en vanlig rad d� scriptet reagerar om f�ltet �r helt tomt, medan den f�rsta if-raden slutar med .indexOf("@") == -1, vilket inneb�r att scriptet reagerar d� det INTE finns ett "@" (snabel-a) i f�ltet. Vill jag att scriptet ska reagera d� det finns ett "@" i f�ltet skriver jag ist�llet .indexOf("@") != -1.
Som jag har skrivit nu i scriptet m�ste ett "@" finnas i email-f�ltet (vilket skulle kunna vara b�de ett TEXTAREA-f�lt och ett INPUT-f�lt (i mitt fall �r det ett INPUT-f�lt)).

Vad mer kan man g�ra?
Jo, man kan t.ex. kontrollera att folk inte kryssar i (eller kanske m�ste kryssa i) rutor. Om du t.ex. har ett formul�r d�r det st�r "Om du har l�st v�ra regler, kryssa i h�r." och sedan det finns en knapp som man kan kryssa i d� kan du anv�nda detta script:

        if (document.formularets_namn.knappens_namn.checked)
        {
        }
        else
        {
        alert("Du m�ste l�sa v�ra regler f�r att anv�nda detta formul�r.");
        return false;
        }
...Eller detta script (b�da g�r exakt samma sak):
        if (!document.formularets_namn.knappens_namn.checked)
        {
        alert("Du m�ste l�sa v�ra regler f�r att anv�nda detta formul�r.");
        return false;
        }
Det som h�nder �r att om rutan �r ikryssad s� h�nder inget, om den inte �r ikryssad s� kommer en alertruta fram. Efter att alertrutan kommit fram s� aktiveras raden return false;, vilket avslutar formul�ret s� att det inte skickas iv�g, smart va? ;)


Ja, s� l�tt var det att kontrollera sina g�stb�cker, chatrum, e-mail-formul�r eller vad man nu kan t�nka sig ha formul�r till. Som du vet kan du ju blanda in flera saker s� att man t.ex. inte kan skriva in sig med ett speciellt namn etc. Men f�r att f� det helt s�kert m�ste du anv�nda cgi, vilket vi inte ska g� igenom.

Innan detta kapitel slutar ska jag bara s�ga en viktig sak som annars kanske st�ller till stora problem.
N�r du ska �ndra ett v�rde i ett f�lt genom att ett JavaScript s�tter in ett v�rde automatiskt ska du t�nka p� att formul�ret m�ste vara placerad h�gre upp p� sidan �n scriptet, annars kommer scriptet visa ett felmeddelande och s�ga att det f�ltet (som du ska �ndra v�rde p�) inte finns (detta g�ller bara om v�rdet ska �ndras automatiskt, inte genom en funktion som ska startas av bes�karen).
Detta beror logiskt p� att om scriptet skrivs ut f�re formul�ret p� sidan s� finns ju inte foruml�ret d� scriptet aktiveras, och d�rf�r f�r man ett meddelande om att formul�ret inte finns.



Jaha, nu var denna del avslutad, mer kommer i n�sta del.






Copyright © Omid Rouhani 1997-2022; Alla r�ttigheter reserverade.
Guider: [ HTML guide ] - [ JavaScript guide ] - [ DHTML guide ] - [ Perl guide ] - [ Sitemap ]