|
JavaScript
informasjon
|
| oppdatert: Mandag 16. juli 2002
|
| JavaScript
|
|
JavaScript er et interpreterende objekt-orientert programmeringsspråk. JavaScript er i utgangspunktet utviklet av Netscape. ECMA (European Computer Manufactures Association) har i etterkant bl.a i sammarbeid med Netscape standardisert deler av språket, kalt ECMAScript. De leder nå arbeidet med å standardisere nye versjoner. JScript til Microsoft var i utgangspunktet basert på Netscapes publikasjoner omkring JavaScript. Det var dessverre noe avik mellom tidlige versjon av JScript og JavaScript, men begge forholder seg nå til ECMAScript standardene. Det unike med ECMAScript er at nettleserene til både Netscape, Microsoft og mange andre (Opera) støtter språket.
ECMASrcipt-koden kan skrives rett i HTML-filen innenfor et script-element. Script-elementet må ha atributtet language="JavaScript". Det er også mulig å inkludere eksterne javscript-filer ved hjelp src-atributtet i script-elementet. Her følger en kort presentasjon av ECMAScript som muligens er nyttig for programmere med kjennskap til Java eller lignende programmeringsspåk. Før øvrig finnes dokumentasjon av JavaScript på http://developer.netscape.com/docs/manuals/javascript.html
En av styrkene til ECMAScript er at det tillater funksjoner. Dette er ikke vanlig i alle script-språk. ECMAScript og Java har lik syntaks med hensyn til funksjoner, løkke- og if-konstruksjoner samt aritmetriske utrykk. ECMAScript har følgende 13 av Java's 50 nøkkelord: break, false, if, return, case, continue, for, new, while, else, null, switch, true. Legg spesisielt merke til alle nøkkelord som har med variabel-typer, arvelighet av klasser og exception-behandling er fjernet. Exception-behandling er inkludert i nyere versjoner av språket, men ikke omtalt her. ECMAScript definerer følgende 5 nye nøkkelord.
- var
Variabler i ECMAScript kan en tenke på som pekere til objekter. Variabler kan definers ved hjelp nøkkelordet "var". Scoopet til variablen er blokken den blir definert i. Det er imidlertid også lovlig å benytte ikke forhåndsdefinerte variabler. Det er viktig å merke seg at scoopet til ikke forhåndsdefinerte variabler automatisk blir satt/betraktet som globalt. Variabelene er ikke type definert og kan dermed peke til alle typer objekter. Dette betyr at en variabel som er tilordnet et Number-objekt kan senere tilordnes et String-objekt.
- function
Alle parameterverdier til funksjoner overføres "by value". Eks.: function funk(parameter1, parameter2) {//selve innmaten i funksjonen}. Se forøvrig omtale of Function-objektet lenger ned.
- in
Nøkkelordet benyttes i løkker for å gå igjennom alle variabler i objektet. Arvete egneskaper og metoder er ikke inkludert. Eks.: for (i in A_sirkel) {//hit kommer en gang for hver variabel objektet A_sirkel innholder. Variablen "i" peker etter tur på samme objektet som variablene i objektet, i dette tilfelle A_sirkel. }
- with
Tilsvarer with-nøkkelordet i ADA. With-nøkkelordet benyttes til å prefikse variabelnavn. Alle variabelnavn inni blokken som tilhører et bestemt objektet vil bli default prefikset. Navnet på objektet oppgis i parentes etter with-nøkkelord før starten på blokken, eks: with (A_sirkel) {//variabelnavn som tilhøre A_sirkel er ikke nødvendig benytte "A_sirkel." foran}
- typeof
Tilsvarer instanceof-nøkkelordet i Java. Benyttes til å bestemme objekttype en variabel er tilordnet.
Den største forskjellen mellom Java og ECMAScript er biblioteket av standard objekter. Netteleserene har et fast bibliotek med objekter. ECMAScript-objektene kan deles opp i kjerne- og klient-objekter. Her følger en kort presentasjon av kjerne objektene:
- Object
Alle objekter i ECMAScript har arvet egenskapene og metodene til dette objektet. ECMAScript inneholder mulighet for arvelighet, men detter er svært forskjellig fra Java, som omtale av prototype. Object-objektet innholde følgende standard metoder og egenskaper: constructor, eval(), prototype(), toSource(), toString(), unwath(), valueOf() og watch(). Nedenfor blir hver enkelt av disse funksjonene og egeneskapene nærmere omtalt, men først skal vi se litt på hvordan en kan definere egne instanser av Object-objekte ved hjelp av new-nøkkelordet, samt tilordning av egenskaper og metoder, som eksempel ønsker vi å lage et sirkel-objekt.
var A_sirkel=new Object();
A_sirkel.d = 4;
A_sirkel.PI = 3.14;
A_sirkel.omkrets = function() {return this.d * this.PI};
Her har en laget instans Object som utvides med egenskaper og metoder. En kan dynamisk legge egenskaper og metoder til instansen. Legg merke til bruk av nøkkelordet this i metoden for å refere til variabler/egenskaper i objektet. Det finnes også en alternativt mer kompakt syntaks med identisk resultat som over:
var A_sirkel={d:4, PI:3.14, omkrets: function() {return this.d * this.PI}};
Det er også mulig å dynamisk fjerne både egneskaper og funksjoner fra instansen. Slette foregår ved bruk av nøkkelordet delete, eks:
delete A_sirkel.d
A_sirkel.r = 2;
A_sirkel.omkrets = function() {return this.r * this.PI * 2 };
For å akessere egenskaper i objektet benyttes vanlig dot-notasjon, men det er også mulig å benytte []-operatoren, f.eks A_sirkel.r er ekvivalent med A_sirkel["r"]. Den mer array-preget aksessering har den fordelen at selve idetifikatoren er et String-objekt som kan manipuleres under kjøring, f.eks er følgende ekvivalent med notasjonen over: var a="r"; A_sirkel[a];.
- constructor
Det er mulig å definer konstruktør-funksjoner. Slik at alle instanser som lages ved hjelp av konstuktør-funksjonen innholder i utgangspunktet de samme metoder og egenskaper. Objektet over kan ved hjelp av konstruktør definers som følger:
function Sirkel(radius){
this.r = radius;
this.PI = 3.14;
this.omkrets = function() {return this.r * this.PI * 2};
}
var A_sirkel=new Sirkel(4);
Fordelen med konstruktør-funksjon er mindre kode når en trenger mange like intanser av et objekt. A_sirkel sin constructor-variabel blir automatisk tilordnet konstruktør-funksjonen.
- prototype
Ved bruk av konstruktør-funksjonen over vil hver instans av objektet innholde en lokal kopi av metoden omkrets(). Det er mer effektivt om alle instanser arvet egenskaper til et prototype-objekt. prototype-variablen peker til en slikt prototype-objekt. I eksemplet over bør vi tilordnet protype-objektet omkrets-metoden. Dette gjøres som følger, eks.
function Sirkel(radius){
this.r = radius;
this.PI = 3.14;
}
Sirkel.prototype.omkrets = function() {return this.r * this.PI * 2};
var A_sirkel=new Sirkel(4);
Legg merke til at det er Sirkel.prototype og ikke A_sirkel.prototype som er referansen til prototype.objektet. Prototype-objektet aksesser på denne måten via konstruktør-funksjonen. Det er mulig å oppdatere prototype-objektet til standard objekter som String, Number etc på tilsvarende måte.
Vi har sagt over at alle objekter arver metoder og egenskaper til Object-objektet. Det skjer ved at konstruktøren Object() er tilknyttet et prototype-objekt innholden disse standard metoder og egenskaper. Enten kalles Object-konstruktøren direkte eller inderekte ved at alle konstruktører implisitt kaller denne. Atså A_sirkel over har to prototype-objekter i tillegg selve Sirkel-objektet. Benyttes likt navn på egenskaper eller metoder i alle tre objektene vil følgende presedensen være gjeldene: A_sirkel, Sirkel.prototype, Object.prototype.
I tillegg til prototype arvelighet kan ECMAScript også simulere statiske-variabler og -metoder i Java. Dette gjøres ved tilordne konstruktør-funksjonen egenskaper og metoder. For Sirkel kunne variablen "PI" vært definert statiske som følger:
function Sirkel(radius){
this.r = radius;
}
Sirkel.PI = 3.14;
Sirkel.prototype.omkrets = function() {return this.r * Sirkel.PI * 2};
var A_sirkel=new Sirkel(4);
Statiske definerte -egenskaper og -metoder finnes kun i et eksemplar av uansett hvor mange instanser objektet har. De er i ECMAScript implimentert som globale variabel. Statiske-egenskaper og -metoder kan ikke innholde this-referanse.
- toString og valueOf
Funksjonen toString benyttes til å konverterte tilhørende objekt til en streng. Funksjonen kalles automatiks når en instans av objektet er parameter til metodene alert(), document.write() og ved bruk + operator for sammensetning av tekstutrykk. Funksjonen Object.prototype.toString overskrives vanligvis i prototypen til selve objektet, f.eks
function Sirkel(radius){
this.r=radius;
}
Sirkel.PI = 3.14;
Sirkel.prototype.omkrets = function() {return this.r * Sirkel.PI * 2 };
Sirkel.prototype.toString = function() {return "radius: " + this.r.toString() };
Sirkel.prototype.valueOf = function() {return this.r };
var A_sirkel=new Sirkel(4);
Kall på A_sirlel.toString() returner "radius: 4". ECMAScript kaller på valeuOf() til objektet når det ønsker å konvertere objektet om mulig til tall eller boolean. valueOf() må på tilsvarende måte, som toString(), overskrives. ECMAScript vil i noe sammenhenger prioritere kall på valueOf() framfor toString().
- toSource
Returnerer kompakte syntaktiske beskrivelse av egenskaper og metoder til en instansen av et objekt. Egenskaper og metoder til prototype-objekter er ikke inkludert.
- watch() og unwatch()
Disse to metoden benyttes hovedsakelig for debugging av ECMASCript. På tilsvarende måte, som toString() og valueOf(), må metoden overskrives. Metoden tar to parameter. Den første er navnet på en egeneskap i objektet den andre er handler til en funksjonen som skal starte når egenskapen endrer verdi. Selve handler-funksjonen tar tre parametere: Navn på egenskap, eksisterende verdi, ny verdi. Ønsker vi å overvåke endringer av radius kan følgende kode benyttes.
function visEndring(egenskap, orgVerdi, nyVerdi){
alert ("Egenskap: "+egenskap+"\nOpprinnelig vedi: "+orgVedi+"\nNy verdi: "+nyVerdi);
}
A_sirkel.watch(r, visEndring); //her kun tilordnet en instans
- Number
Objektet innholder en "floating point"-verdi. Alle tallverdier i ECMASript lagres i instanser av objektet. Alle konstanter er instanser av objektet. Aritmeteriske utrykk gir ny instanser av objeket. Aritmetriske-utrykk innholder implesitte kall til valueOf()-funksjonen til Number-objekter, slik at følgende utrykk er ekvivalente a.valueOf()+b.valueOf()==a+b. Tilsvarende blir i tekst-utrykke toString()-funksjonen kalt.
Objektet innholder i tillegg noe statiske verdier. Når det lageres en for stort eller for lite tall i forhold til øvre og nedre grense (MAX_VALUE og MIN_VALUE) vil objektet bli tilordnet verdiene POSITIVE_INFINITY eller NEGATIV_INFINITY. Ved konverering til strenger blir tall uten desimaler skrevet ut som heltall og tall med desimaler skrevet ut med færrest mulig nuller. Siden konstanter er instanser av Number-objekter kan de kalle på Number-metoder. For å unngå sammenblandig med desimal-skilletegnet må tallverdien omsluttes av paranteser, f.eks (4).toString() lager en streng innholdet tegnet 4.
- String
String-objektet benyttes til å lagre tekst på tilsvarende måte som string-objeketer i Java, men i forskjellige karaktersett. Java benytter UCS og ECMAScript benytter Latin-1. Tekststreng er en sekvens tall og tegn omsluttet av doble eller enkle anførseltegn. Tilsvarende som i Java kan ikke skrivbare tegn kodes, f.eks linjeskift er \n, vognretur er \b, heksadesimal referanse til Latin-1 karakter \xXX, etc. Til forskjell fra Java er det viktig å merke seg at det er mulig å legge sammen to stringer ved plusstegn og to etterfølgende likhetstegn kan benyttes til å sammeligne to strenger. Det er for Java-programmere også viktig å merke seg at length er en egenskap og ingen metode som i Java. Nedenfor er fire metoder for behandling regulære utrykk omtalt for øvrig se andre kilder for dokumentsjon av metoder i objektet.
- search()
Metoden tar et regulært utrykk som parameter og returner start indeks til forekomesten, eventuelt -1 ved ingen match. Metoden overser et eventuelt oppgitt g-atributtet.
- replace()
Metoden tar to parametere. Første parameter er et regulært utrykk og den andre er en tekst-streng som skal erstatte første forkomst i selve String-objektet som tilfredstiller utrykket. Ved bruk av g-atributtet blir alle forekomster byttet ut.
- match()
Metoden tar et regulært utrykk som parameter og returner en array. Første posisjon i arrayen innholder første forekomst av utrykket i String-objektet. Er g-atributtet satt vil de etterfølgende forekomster plasseres i arrayen. Er ikke g-atributtet satt vil forekomsten plasseres i posisjon 0 i Array-objektet. Selve forekomster vil i tillegg bli delt opp i henshold til subsekvenser i utrykket og plassert tilsvaredne posisjoner i arrayen.
- split()
Denne metoden tar et regulært utrykk som parameter og returner et Array-objekt. Forekomster som matcher det regulære utrykket blir oppfattet som separator-tegn. Innholdet i String-objekt mellom to separator-tegn blir sekvenensielt plassert i et Array-objekt.
- Boolean
Boolean-objekter benyttes til å lagre de boolske verdiene: 0 og 1. Resultat av test-utrykk er instanser av Boolean-objekt, f.eks (1!=2). Boolean-objektet innholer funksjonen valueOf() og toString(). Implisitt kall blir gjort til disse funksjonene i hendholvis test- og tekst-utrykk.
- Function
Alle funksjoner i ECMAScript er instanser av dette objektet. Det er tre ulike måter å instansere objektet på:
function f(x) {return x*x;} //statment
var f=new Function ("x", "return x*x;"} //konstruktør-funksjon
var f=function(x) {return x*x;} //utrykk
I alle tre tilfeller utføres kalles funksjonene på lik måte, f.eks f(5) gir resultatet 25. Alle tre tilfeller instanserer et Function-objekt. I alle tre tilfeller benyttes variabel f til å peke på objektet. Brukes konstruktør-funksjon kan selve funksjonen endres under kjøring. Selve funksjonen er spesifisert ved hjelp av String-objekter som overføres som parametere til konstruktør-funksjonen. Den siste parameter til konstruktøren innholder kroppen til funksjonen. De andre parameterene til konstruktøren er navn på parametere til selve funksjonen. Kroppen kan bestå av flere statment avskilt med semikolon. Mulighet for slik dynamiske endring koster selvsagt eksekveringstid og derfor bør de to andre alternativene benyttes om mulig.
Function-objektet har følgende standard egenskaper og funksjoner: arguments, arity, apply(), call(). I tilleg kommer selvsagt standard egenskapet og funksjoner i Object.prototype. Arguments-objektet er omtalt seperat nedenfor. Her følger en kort presentasjon av de øvrige:
- arity
Variablen peker til et Number-objekt som innholder antall parameter funksjonen er deklarert med.
- apply() og call()
Funksjonen benyttes i konstruktører for å kalle på andre konstruktører. Egenskaper og metoder kan på den måten arves fra et annet objekt. F.eks kan vi ønske å inkludere Sirkel-konstruktøren i en Kule-konstruktør:
function Kule (radius){
Sirkel.apply(Sirkel,arguments);
}
eller
function Kule (radius){
Sirkel.call(Sirkel,radius);
}
Forskjellen mellom apply() og call() er kun ulik syntaks for spesifikasjon av paremetere. Begge tar som første parameter et objektet som skal knyttes til this-nøkkelordet i kroppen på funksjonen (i dette tilfelle Sirkel-objekt). Andre parameteren er i apply() en array med argumenter som overføres som parameter til Sirkel-funksjonen. call() tolker alle paremeter etter den første som parametere til Sirkel-funksjonen.
- arguments
Selv om en ECMAScript-funksjon er deklarert med et bestemt antall parametere kan den kalles med et vilkårlig antall argumenter. Alle argumenter til funksjonenen kan aksesseres i arguments-arrayen. I tillegg har arguments-objektet en callee-variabel som peker til funksjonen-objektet den tilhører. Denne referansen er nyttig i rekursive-funksjoner deklart ved hjelp av konstruktør eller utrykk. Ved slik deklarasjon kan funksjonen referer til seg selv ved hjelp av: arguments.callee();
- Array
Array-objektet innholder en dynamisk liste av objekter som benyttes til å simulere array. Hvert liste-element kan peke til et vilkårlig annet objekt. Array-objektet kan instanser på to ulike metoder:
var a=new Array(10,100,"tekst1","tekst2"); //konstruktør
var a=[10,100,"tekst1","tekst2"]; //utrykk
Begge deklarasjone over lager nøyaktig samme Array-objekt innholdene 4 liste-elementer som peker til angitte objekter. Listen blir dynamisk utvidet når en tilordner nye elementer, f.eks a[100]="tekst3". Dette resulteter ikke i at det lages tomme list-elementer for alle posisjoner mellom 3 og 100. Det er mulig forhåndsbestemme antall liste-elementer Array-objektet skal inneholde ved å oppgi tall-parameter til konstruktør-funksjonen, f.eks var a=new Array(10);. Det er her viktig å merke seg at dette er en instans av Array-objekt med 10 liste-elementer (dette kunne også tolkes som en instans av Array-objekt med et liste element som peker til et Number-objektet med verdi 10). Hver list-element kan refere til andre Array-objekter, f.eks var a=[["a","b"],["c","d"]]; //her er a[1][1]=="a" og a[2][2]=="d".
Array-objektet har et length-atributt som angit antall objekter det referer til. Array-objektet har også noen innebygde funksjoner for sortering, sammenslåing, endre rekkefølge etc.
- Date
Date-objekt kan benyttes til å lese ut system-klokken på klientenmaskinenen eller kan tilordnes et klokkeslett som parameterverdi. Det flere muligheter for å konvertere datoen og utskriftsformater.
- Math
Objektet innholde konstanter og metoder som er vanlig i mattematiske beregninger, f.eks cos(), sin(), log() etc.
- Globale
Alle kjerne -funskjoner og -egenskaper som ikke tilhører andre objekter vil pr default tilhøre dette objektet. Dette betyr at en ikke trenger å referere til objektet før en benytter tilhørende funksjoner og egenskaper.
- Package
- RegExp
Regulære utrykk i JavaScript 1.3 er basert på Perl 5. Omtalen her kun ment som en kort introduksjon. Alle regulære-utrykk i ECMAScript lagres i RegExpObjekter. Det er to metoder å instansere objektet på:
var pattern = new RegExp("/.*/"); //konstruktør-funksjon
var pattern = /./; //utrykk
Regulære utrykk begynner og slutte med foroverlent skråstrek og i eksemplet over innholder utrykket kun et punktum. Punktum står for et vilkårlig tegn.
RegExp benyttes av flere funksjoner. I selve RegExp-objektet er det en test-metode som sjekker om en strengen tilfredstiller utrykket, f.eks pattern.test("abc"); vil returnere sant. RegExp har en exec-metode som søker igjennom en streng etter match og returner et Array-objekt. Array-objetet innholder første påtrufne forekomst som første element. De øvrige elementene inneholder i sekvensiell rekkfølge den delen av forekomsten som matcher tilhørende gruppe i utrykket. Ved mislykket søk returners null. String-objektet har fire funksjoner som bruker regulære utrykk: match(), search() og replace(), split(). Metodene er omtalt i sammenheng med String-objektet.
Regulære utrykk kan syntaktisk deles opp i som følger:
- Enkelt tegn
En kan i det regulære utrykk direkte skrive inn den sekvens av tegn en ønsker forekomesten skal ha. En del ikke alfanummeriske tegn må prefikses med bakoverlent skråstrek bl.a punktum, pluss-, spørsmåls-, stjerne-tegn og vanlig-, hake- og klamme-paranteser samt de ikke skrivbare tegn som linjeskift etc.
- Tegnklasser
En tegnklasse indikeres ved omslutte tegnene med hake-parantes. En tegnklasse matcher et tegn og kun de tegn den innholder, eks /[abc]/. Dette indikere et utrykk som matcher "a", "b" eller "c". Det er mulig å negere en klasse ved å la ^ være første tegn inne i parantesen. Det også mulig å definere seksvenser av tegn ved bruk av bindestrek, eks [0-9] matcher et siffer. Noen vanlig tegnklasser har egne navn:
| . | Alle tegn untatt \n |
| \w | Ekvivalent med [a-zA-Z0-9] |
| \W | Ekvivalent med [^a-zA-Z0-9] |
| \s | Ekvivalent med [\t\n\r\f\v] |
| \S | Ekvivalent med [^\t\n\r\f\v] |
| \d | Ekvivalent med [0-9] |
| \D | Ekvivalent med [^0-9] |
| \b | Omtales senere |
- Repetisjon
I det regulære utrykket kan en bestemme hvor mange ganger et enkelt tegn eller tegnklasse skal gjentas. Dette gjøres ved bruk et tall omsluttet av klammeparanteser, eks /a{10}/. Dette betyr 10 stk a-tegn etterhverandre. Her følger andre måter beskrive gjentagelser på:
| {n,m} | Minst n-ganger, men ikke mer m-ganger |
| {n,} | n-ganger eller mer |
| ? | Ekvivalent med {0,1} |
| + | Ekvivalent med {1,} |
| * | Ekvivalent med {0,} |
- Grupper, alternativer og referanser
Alternativer i regulære utrykk kan markes med vertikal strek, eks /a{3}|b{3}/. Dette utrykket matcher 3 etterfølgende "a" eller "b". Bruk av paranteser kan benyttes til å gruppere utrykket. En kan referere til en gruppe i utrykket ved bruk av notasjonen \n, der n er tall. Gruppene nummereres fra venstre mot høyre. Det er venstere parantes til gruppen som telles uavhengig av nesting. Flere av funksjoner som oppererer på regulære utrykk returnerer som tilleggsinformasjon den delen av forekomsten som matcher hver enkelt gruppe, eks hvis /(a)(b)/ blir matchet mot strengen "abc" vil funksjonen i tillegg forekomsten "ab" også gi informasjon om /1 matcher "a" og /2 matcher "b".
- Posisjon
For å marker at det regulære utrykket skal matche begynnelsen på strengen brukes ^, eks /^start/ dette betyr at strengen må begynne med tegnsekvensen "start" for å en forekomst som matcher utrykket. For matche slutten benyttes $, eks /slutt$/. For matche vanlig avgrensninger for et ord benyttes \b, eks /\bord\b/ dette matcher alle forekomster av "ord" i strengen.
- Atributter
Etter definisjonen av det regulære utrykket kan det legge til atributter. i-atributtet indikere at matching ikke skal skille mellom store- og små-bokstaver. g-atributtet sier at det skal forsette å lete igjen igjennom hele strengen etter alle forekomster.
Klient-objektene benyttes hovedsakelig for å manipulere HTML-dokumenter. Denne modulariseringen for manipulering av HTML-dokumentet kalles DOM level 0, se generell omtale av ulike DOM (Document Object Model).
|
| Eksempel: Form to mail
|
|
Koden nedenfor viser bruk av ECMAScript i vårt "form to mail" eksempel. "Form to mail"-begrepet betyr at kundens bestilling mottas i en HTML-form og sendes pr. mail til leverandøren. I dette forenklete eksemplet fyller du kun inn din e-postadresse og en mail sendes til denne adressen, trykk her for å teste.
Skjemaet består av to siden en side du fyller inn e-postadressen og en bekreftelse sider som forteller hvor e-posten er sendt. Ved bruk av ECMA-script kan begge disse siden lagres i en fil og forskjellene plasseres i javascript-elementer. Dette minsker arbeidet med vedlikehold. Om nettleseren skal vise siden 1 eller 2 indikeres av s-variablen som tilordnes verdien 1 eller 2.
|
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>registrering</title>
<link rel="stylesheet" type="text/css" href="/dokumentasjon/klient/css/demo.css" media="screen" />
</head>
<script language="JavaScript">
//REPLACE START
var s=1;
epost="";
//REPLACE STOPP
function skrivSide1(){
document.write("\
<td><input type='tekst' size='30' id='epost' /></td>\
<td><input type='submit' value='test' id='send' /></td>");
}
function skrivSide2(){
document.write("<td class='feltVerdi'>" + epost + "</td><td></td>");
}
</script>
<body>
<form method="post" action="http://registrar.no/servlets/no/javascript/a.class">
<p>
<span class="tekstAdvarsel">(demo)</span><br />
<script language="JavaScript">
<span class=\"tekstOverskrift\">Javascript / Servlet testskjema side "+ s +"</span>
</script>
</p>
<table border="0" cellspacing="0" cellpadding="1" class="feltVerdi">
<tr>
<td class="feltLeder">
<span class="tekstLeder"> Din e-postadresse: </span>
</td>
<script language="JavaScript">
if (s==2)skrivSide2(); else skrivSide1();
</script>
</tr>
</table>
<p>
<span class="tekstAdvarsel">(demo)</span>
</form>
</body>
</html>
|
Er s-variablen tilordnet verdien 2 utføres skrivSide2(), hvis ikke utføres skrivSide1(). Verdien til s-variablen settes av tilhørende webserver program. Inennen for javascript-elementet benyttes standard funksjonen "document.write()" for å skrive en tekst-streng til HTML-dokumentet. Vi ser at strengen i skrivSide1 går over flere linjer. For at teksten skal oppfattes som en streng avsluttes med linjen med bakoverlendt skråstrek. Innholdet i tekst-strengen blir plassert i HTML-dokumentet der skrivSide-funksjonen blir kalt og ikke der funksjonen er deklarert.
PS: For å debugge ECMAScript kan nettleseren til Netscape benyttes. Etter ECMA-Scriptet er forsøkt vist i nettleseren kan eventuelle feilmeldinger leses i eget vindu som åpnes ved å skrive "javascript:" i adresse-feltet.
|
|