|
|
|
|
|
|
FUNKTIONEREn funktion skrives som funktionsnavn() eller funktionsnavn(parametre)For at udføre funktionen skal der være et kald til den; det kan også komme fra HEAD eller BODY afsnittene. Her et eksempel på en funktion der tager et navn som parameter og returnere en bestilling. Men en funktion behøver ikke at bruge parameter eller returnere noget. <script> var navneliste= new Array("Olga","Jørgen","Sofus","Esmaralda","Ole"); var nlindex=0; function oel(navn){ if (nlindex==5) nlindex=0; if (navn == null) return oel("Fanden selv") else return "En øl til "+navn } </script> Knappen nedenfor er lavet med koden: <form name=AF> <input type=button name=AB value="Hvem skal mange bajer ha" onclick="document.AF.AB.value=oel(navneliste[nlindex++]);if (nlindex>5) nlindex=0;")> </form> Ovenfor sker kaldet med javaScript-kide i en event-handler (onClick i en knap). javaScript-koden kan naturligvis også placeres et andet sted, f.eks. kan man få <A Href=javascript:funktionskald() til at kalde en javaScript-funktion (her kaldet funktionskald()). Man kan ikke efter javascript: bruge anden javascript-kode end funktionskaldet, så vi må tilføje en funktion til scriptet ovenfor: function ABskift(){ document.AF.AB.value=oel(navneliste[nlindex++]) } <A HRef=javascript:ABskift() > Ølskifte </a> Ølskifte (klik for at skifte tekst på knappen ovenfor) Hvis en funktion skal bruge et tal som input, fordi det skal bruges i en regneoperation, og den får en streng der ikke kan opfattes som et tal, bliver resultatet konstanten NaN (not a number). Man kan også importere funktionerne fra en extern fil : <script SRC=MINFUNC.js></script> | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
ParameteroverførslenParameteroverførslen sker normalt "by value", dvs hvis én funktion sender en variabel til en anden funktion, og denne anden funktion ændrer dens værdi, påvirker det ikke variablens værdi i den første funktion. Undtagelsen er hvis parameteren (variablen) er et objekt, og den 2.den funktion ændrer værdien af en af de variable objektet ejer (parameteroverførsel "by reference"):Den sidste knap: <input type=button value="3 parametre" onClick='parametertaeller("pnul","p1","p2")'> | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
| | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
REFERENCER til objekterHvis vi vil - eksempelvis - skrive til en knap (button), så må vi i javaScript-koden forklare vafforen knap. Så kigger vi på windowhirakiet og ser arvefølgen:window > document > form > buttom Der er ofte kun ét vindue og ét document, men flere forme og knapper, så for at udpege en bestemt knap må vi navngive den og den tilhørende form. vi kan så udpege knappen med window.document.formens_navn.knappens.navn Vi har en "ØL"knap ovenfor, vi kaldte knappen "AB" og den tilhørende form "AF", så vi kunne skrive til knappen med document.AF.AB.value=oel(navneliste[nlindex++]) ordet "window" er sprunget over, så er det underforstået at det er "dette" vindue. Det kan forenkles endnu mere: Koden indeni knappen skal skrive til "denne" knap, og hertil har vi det reserverede ord "this", så vi havde bare behøvet at skrive this.value=oel(navneliste[nlindex++]) Eksemplet lige ovenfor benytter det reserverede ord this. Kald til et andet vindue: Hvis man åbner et nyt vindue med nytvindue=(open(...)) Fra det nye vindue kan man ‘ndre indholdet i det kaldende vindue med opener.location=FILY.HTM Hvis der bruges rammer henviser parent til den fil der kaldte "dette" vindue og man kan skifte indhold i en anden ramme med parent.rammenavn=FILZ.HTM Metoden vist ovenfor, at kalde objekt efter navn er én af 3 måder at kalde et objekt på. De to andre bruger objektets typenavn efterfulgt af [index] hvor "index" enten kan være det navn der er brugt ved den første metode (husk gåseøjne), eller det kan være et nummer, hvor de objekter af denne type med de samme forældre nummereres 0, 1, 2 ... i den rækkefølge de forekommer i HTML-filen. I eksemplet ovenfor, lad os sige at "gofil" er den anden form (index 1 !) i HTML-filen, og "lukgofil" den 1.ste input type "button" i "gofil". Vi har altså -ideelt- 3 forskellige måder at referere til knappens value på:
Nedenfor har jeg derfor skrevet windows-hirakiet én gang til, men med farvevalgene:
Hvis man tester en objecttype om A-B-C virker, men har stavet navnet på objekttypen forkert, kommer man til at kun A virker. Det kunne tolkes som om jeg har stavet forkert for 4.de niveau's objekterne, hvor jeg er kommet til, at kun A virker. Navnene er fra en oversigt af Danny Goodman | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
BOX-type og ikke-BOX-type objekterMange objekter er BOX-type (eller canvas-type), de refererer til et afgrænset, gerne firkantet, område på skærmen. Det er kun dem man kan give et navn når de defineres i HTML, og så referere til navnet fra anden javaScript-kode.Andre objekter er ikke-box-type (inline-type), f.eks. objektet link som defineres med HTML-koden <A Href=...> tekst.. </A> Det er ikke en fejl at tildele disse elementer et navn, men der kan desværre ikke refereres til navnet udefra fra anden JavaScript-kode. Derimod kan man indeni elementet have eventHandlers der bruger javaScript kode. Eks: (kræver naturligvis at objektet ejer eventHandler onMouseOver) <A Href=FindesEj.HTM onMouseOver="alert('Æv bæv, du kan bare ikke klikke mig')"> Klik mig hvis du kan</a> Klik mig hvis du kan
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||
Referencer til rammerI HTML opbygges rammer med en styrende HTMLfil, der definerer rammernes indbyrdes placering, og rammerne hvis indhold kommer fra andre HTMLfiler. Her en udbygning af en metode, som jeg dog også har beskrevet tidligere (i <HTML afsnittene
window.location er adressen på den fil, der er i dette windue, og du kan lave en knap, der skifter indholdet i dette vindue, ved at kalde javaScript koden onClick='window.location=NyFil.HTM' (dette svarer helt til HTML-kode <A Href=NyFil.HTM>) det er overflødigt at skrive window, man kan nøjs med: onClick='location=NyFil.HTM' I stedet for dette vindue kan du også skifte indholdet i et andet vindue:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||