{"id":132,"date":"2008-10-22T15:01:55","date_gmt":"2008-10-22T13:01:55","guid":{"rendered":"http:\/\/www.kristiansborg.dk\/bibliotek\/?page_id=132"},"modified":"2008-10-22T15:01:55","modified_gmt":"2008-10-22T13:01:55","slug":"l%c3%a6r-javascript-3-afsluttende-javascript","status":"publish","type":"page","link":"https:\/\/www.kristiansborg.dk\/bibliotek\/artikler\/it\/l%c3%a6r-javascript-3-afsluttende-javascript\/","title":{"rendered":"L\u00e6r Javascript 3: Afsluttende Javascript"},"content":{"rendered":"<p>Afsluttende JavaScript<\/p>\n<p>\u00a0<\/p>\n<p>I denne sidste artikel i Computer PCs JavaScript-kursus fort\u00e6ller <em>Kristian Hansen<\/em>, hvordan man kan lade JavaScript-programmer styre formularer og i \u00f8vrigt integrere dem med sine HTML-dokumenter.<\/p>\n<p>De tidligere afsnit af dette JavaScript-kursus har gennemg\u00e5et, hvordan man skriver sine egne JavaScript-funktioner og programmer, og hvordan man g\u00f8r brug af de, der allerede findes i JavaScript, men det har altid v\u00e6ret enkeltst\u00e5ende programmer. I denne del af kurset vil det blive gennemg\u00e5et, hvordan man knytter sine JavaScript-funktioner til HTML-dokumenterne.<\/p>\n<p><strong>Formularer<\/strong><\/p>\n<p>F\u00f8r scriptsprogene blev opfundet, skulle man bruge et CGI-program til at h\u00e5ndtere formularer. Stadigv\u00e6k er det ikke alting, scriptene kan klare, men n\u00e5r det kommer til at kontrollere indholdet af formularen, er scriptsprogene ret uovertrufne.<\/p>\n<p>Der er ikke store forskelle mellem en formular, der skal h\u00e5ndteres af CGI, og en formular, der skal h\u00e5ndteres af eksempelvis JavaScript. Blot skal man v\u00e6re opm\u00e6rksom p\u00e5, at alle elementer i formularen &#8211; ogs\u00e5 formularen selv &#8211; skal have et navn. Det vil sige, at man skal angive name-parametren i alle html-kommandoerne. Eksempel 1 viser, hvordan det kan g\u00f8res. Her er formularen &#8211; i tr\u00e5d med sund fornuft &#8211; kaldt formular. De to checkbokse, som brugeren kan markere, hedder henholdsvis lyd og billeder. S\u00e6rlig opm\u00e6rksomhed skal imidlertid rettes p\u00e5 den linie, hvor knappen bliver oprettet. Udover navn og titel skal der angives, hvilken JavaScript-funktion der skal udf\u00f8res, n\u00e5r man trykker p\u00e5 knappen. I dette tilf\u00e6lde er det visSide.<\/p>\n<p><strong>Objekter<\/strong><\/p>\n<p>Form\u00e5let med visSide-funktionen er at evaluere brugerens valg. For at kunne g\u00f8re det, er det n\u00f8dvendigt fra JavaScript-programmet at kunne bruge de informationer, der findes i formularen. Heldigvis optr\u00e6der selve formularen som et objekt, og som det er blevet gennemg\u00e5et tidligere, kan indholdet af objekter tilg\u00e5s ved at skrive objekt-navnet efterfulgt af et punktum. Objektet er i dette tilf\u00e6ldet formularens navn &#8211; formular. Herefter skal man angive navnet p\u00e5 det element i formularen, man \u00f8nsker informationer om. Her er det henholdsvis lyd og billeder. Eftersom disse objekter er checkbokse, har de en variabel ved navn checked. Denne angiver, om den p\u00e5g\u00e6ldende checkboks er markeret eller ej. Det vil sige, at man for at se, om brugeren har markeret billeder-feltet, skal skrive formular.billeder.checked.<\/p>\n<p>Dette foretages i visSide-funktionen. I den f\u00f8rste sammenligning bruges det kryptiske dobbelt-og-tegn. Det angiver blot, at begge betingelser skal v\u00e6re opfyldt (logisk og). Hvis blot en af betingelserne skulle have v\u00e6ret opfyldt (logisk eller), skulle man have angivet || i stedet. Bortset fra det er det relativt simpelt ved hj\u00e6lp af en r\u00e6kke if-s\u00e6tninger at finde ud af, hvilken side, der skal vises. Herefter er sp\u00f8rgsm\u00e5let bare, hvordan siden vises. Som bruger kunne man bare have skrevet adressen i Location-feltet, og JavaScript har et objekt, der svarer til dette felt &#8211; det hedder location. Dette objekt har en variabel ved navn href. Denne variabel angiver, hvilken side der vises i \u00f8jeblikket, og ved at tildele denne variabel en v\u00e6rdi, kan man skifte side. Man kan enten angive en absolut sti til den nye side eller en sti, der er relativ til den aktuelle side. I eksempel 1 er det sidste tilf\u00e6ldet.<\/p>\n<p><strong>Mere om formularer<\/strong><\/p>\n<p>Formularer best\u00e5r imidlertid ikke kun af knapper og checkbokse, og det vil v\u00e6re for omfattende at gennemg\u00e5 alle de forskellige elementer her. Dog kan det siges, at man p\u00e5 langt de fleste, kan angive, at der skal udf\u00f8res JavaScript-funktioner, n\u00e5r en bestemt begivenhed indtr\u00e6ffer. Et eksempel er ved hj\u00e6lp af OnClick-parametren, som anvendes i eksempel 1. Andre eksempler er OnBlur, OnFocus, OnSelect, OnChange, OnClick, OnDblClick, OnMouseDown, OnMouseUp, OnMouseOver, OnMouseMove, OnMouseOut, OnKeyPress, OnKeyDown og OnKeyUp. Betydningen af de fleste begivenheder burde v\u00e6re indlysende. Dog skal m\u00e5ske OnBlur og OnFocus beskrives yderligere. OnBlur udf\u00f8res, n\u00e5r et felt ikke l\u00e6ngere er markeret. For eksempel hvis brugeren flytter mark\u00f8ren ved hj\u00e6lp af musen eller ved hj\u00e6lp af tabulatorknappen. OnFocus bliver udf\u00f8rt, n\u00e5r feltet atter modtager mark\u00f8ren.<\/p>\n<p>De forskellige elementer, HTML stiller til r\u00e5dighed i formularer, er temmelig forskellige, og derfor bliver deres opbygning som JavaScript-objekter ogs\u00e5 forskellig. Det er s\u00e5ledes ikke alle elementer i en formular, der har de samme variable. For eksempel har elementer, som man kan taste tekst ind i, en value-variabel, der indeholder den tekst, der er blevet indtastet. Ligeledes kan skjulte elementer &#8211; input type = hidden &#8211; ogs\u00e5 bruges, og ogs\u00e5 deres v\u00e6rdi tilg\u00e5s gennem value-variablen.<\/p>\n<p>Eksempel 2 viser, hvordan man kan bede brugeren indtaste navn og adresse, og hver gang et felt forlades kontrollere, om feltet er udfyldt.<\/p>\n<p>Eksemplet viser ogs\u00e5, hvordan focus-metoden kan bruges. Den kan kaldes p\u00e5 alle objekter i en formular og s\u00f8rger for, at mark\u00f8ren flyttes hen til feltet. I dette eksempel bruges den til at sikre, at brugeren ikke kan forlade et felt, f\u00f8r det er udfyldt.<\/p>\n<p><strong>Goddag og farvel<\/strong><\/p>\n<p>Hvis man gerne vil have en funktion udf\u00f8rt, s\u00e5 snart ens side bliver indl\u00e6st, kan man bruge OnLoad-parametren i HTMLs BODY-kommando. Her kan man &#8211; ligesom ved OnClick og de andre parametre &#8211; angive, hvilken JavaScript-funktion der skal udf\u00f8res. Hvis man gerne vil have en funktion udf\u00f8rt, n\u00e5r brugeren forlader ens side, kan man bruge OnUnload. Eksempel 3 viser, hvordan man kan sige p\u00e6nt goddag og p\u00e6nt farvel til brugeren.<\/p>\n<p><strong>Fading<\/strong><\/p>\n<p>OnLoad og OnUnload kan ogs\u00e5 bruges til andet end at vise beskeder. For eksempel kan man skabe effekten af at blive fadet ind og ud af siderne. Eksempel 4 viser, hvordan dette kan g\u00f8res. Eksemplet indeholder to funktioner &#8211; fadeIn og fadeOut &#8211; der henholdsvis bruges, n\u00e5r siden indl\u00e6ses, og n\u00e5r den forlades. fadeIn genneml\u00f8ber en for-l\u00f8kke startende ved 0, der er farven sort. Herefter l\u00e6gges den hexadecimale v\u00e6rdi 010101 til hver gang. Det vil sige, at farven for hvert genneml\u00f8b af l\u00f8kken bliver en gr\u00e5tone lysere. Grunden, til at der arbejdes med hexadecimale v\u00e6rdier, er, at JavaScript arbejder med farver p\u00e5 samme m\u00e5de som HTML. Det er muligt at angive farver som decimaltal, men det er lidt nemmere at f\u00f8lge med i de hexadecimale. Inde i selve l\u00f8kken foretages \u00e6ndringen af baggrundsfarven. Det sker ved at \u00e6ndre v\u00e6rdien af document.bgColor. Dette svarer til den bgcolor, der kan s\u00e6ttes i BODY-kommandoen.<\/p>\n<p>Funktionen fadeOut har den modsatte effekt. Her startes fra hvid og fades mod sort.<\/p>\n<p><strong>Det afsluttende eksempel<\/strong><\/p>\n<p>Ligesom VBScript-kurset afsluttes ogs\u00e5 dette kursus med et eksempel. Igen drejer det sig om, at brugeren kan indtaste en tekst, der vil blive vist rullende i statusvinduet. Derudover er det muligt for brugeren at angive, den hastighed teksten skal rulle med. Dertil bruges to tekstfelter &#8211; tekst og hastighed. N\u00e5r mark\u00f8ren forlader disse felter kontrolleres det, at der er indtastet noget i dem, og i hastigheds tilf\u00e6lde kontrolleres det ogs\u00e5, at det, der er indtastet, er et tal. Det g\u00f8res ved hj\u00e6lp af en funktion med et kryptisk navn &#8211; isNaN. Det betyder is not a number og angiver, om den tekst, funktionen f\u00e5r med som parameter, ikke er en talv\u00e6rdi.<\/p>\n<p>N\u00e5r brugeren klikker p\u00e5 Opdat\u00e9r-knappen, skal teksten begynde at blive vist i browserens statuslinie nederst i vinduet. Inden dette sker bliver indholdet af formularen kopieret over i globale variable. Det betyder, at visningen af teksten vil forts\u00e6tte korrekt, selvom brugeren v\u00e6lger at \u00e6ndre indholdet af formularen. F\u00f8rst n\u00e5r brugeren igen trykker p\u00e5 Opdat\u00e9r, vil indholdet af formularen medf\u00f8re \u00e6ndringer i statuslinien.<\/p>\n<p>Til slut i startClick-funktionen kaldes setTimeout-funktionen p\u00e5 window-objektet. Denne funktion s\u00f8rger for at udf\u00f8re en anden funktion efter et givent interval. I dette tilf\u00e6lde er det funktionen scroll(), der skal kaldes, og derfor angives denne som f\u00f8rste parameter. Funktionens anden parameter er det antal millisekunder, der skal g\u00e5, f\u00f8r funktionen kaldes. Her angives hastighed, da denne variabel jo indeholder den hastighed, brugeren indtastede i formularen.<\/p>\n<p>Det er scroll-funktionen, der foretager selve arbejdet. Det er her, statuslinien opdateres. F\u00f8rst skal man imidlertid beregne, hvor stor en del af teksten, der skal vises. Hvis hele teksten var vist i forvejen, skal der ingenting vises &#8211; s\u00e5 starter man forfra &#8211; ellers skal der vises et tegn mere end sidste gang. Denne kontrol foretages af funktionens indledende if-s\u00e6tning. Herefter bliver statuslinien opdateret. Statuslinien i browseren svarer til objektet window&#8217;s status-variabel. Derfor kan man angive, hvilken tekst der skal vises i statuslinien ved at tildele window.status en v\u00e6rdi. Det sidste, der foretages i funktionen er et kald af setTimeout for at sikre, at metoden bliver kaldt igen.<\/p>\n<p><strong>Videre med JavaScript og Java<\/strong><\/p>\n<p>Computer PCs JavaScript-kursus er nu slut, men det betyder ikke, at man er f\u00e6rdig med at l\u00e6re. Allieret med Computer PCs JavaScript-opslagsh\u00e6fte kan man selv g\u00e5 p\u00e5 opdagelse i sproget, pr\u00f8ve sig frem og derved blive endnu bedre til JavaScript. H\u00e6ftet kan &#8211; sammen med opslagsh\u00e6fter om HTML 4 og VBScript &#8211; bestilles p\u00e5 kuponen andetsteds i bladet.<\/p>\n<p>Hvis man gerne vil videre med mere alvorlig programmering som eksempelvis Java, kan man bruge den Java-compiler, der ligger p\u00e5 denne m\u00e5neds cd-rom. Den er udviklet af Sun, der har defineret Java-sproget, og er fuldst\u00e6ndig gratis at bruge. Der er masser af information &#8211; og ogs\u00e5 en online l\u00e6rebog &#8211; p\u00e5 Javas officielle hjemmeside: http:\/\/www.javasoft.com. Derudover findes der en masse litteratur &#8211; b\u00e5de i trykt form og p\u00e5 Internet &#8211; der g\u00f8r det nemt at l\u00e6re at programmere i Java. Derudover skal man jo ikke glemme, at selvom JavaScript og Java ikke har ret meget til f\u00e6lles, er det jo altid en fordel at have l\u00e6rt et andet programmeringssprog, n\u00e5r man skal l\u00e6re et nyt. Derfor: Held og lykke med udviklingen af JavaScript og Java-programmer!<\/p>\n<p><strong>Eksempel 1 <\/strong><\/p>\n<p>&lt;HTML&gt;<\/p>\n<p>&lt;HEAD&gt;&lt;TITLE&gt;Eksempel 1&lt;\/TITLE&gt;&lt;HEAD&gt;<\/p>\n<p>&lt;SCRIPT Language = JavaScript&gt;<\/p>\n<p>\u00a0<\/p>\n<p>function visSide()<\/p>\n<p>{<\/p>\n<p>\u00a0 if (formular.lyd.checked &amp;&amp; formular.billeder.checked)<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0 location.href = &#8220;lyd_og_billeder.html&#8221;;<\/p>\n<p>\u00a0 else<\/p>\n<p>\u00a0 if (formular.lyd.checked)<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0 location.href = &#8220;lyd.html&#8221;;<\/p>\n<p>\u00a0 else<\/p>\n<p>\u00a0 if (formular.billeder.checked)<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0 location.href = &#8220;billeder.html&#8221;;<\/p>\n<p>\u00a0 else<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0 location.href = &#8220;kedelig.html&#8221;;<\/p>\n<p>}<\/p>\n<p>\u00a0<\/p>\n<p>&lt;\/SCRIPT&gt;<\/p>\n<p>\u00a0<\/p>\n<p>&lt;BODY&gt;<\/p>\n<p>&lt;FORM NAME = formular&gt;<\/p>\n<p>Vil du b&amp;aring;de have lyd og billede p&amp;aring; siden?<\/p>\n<p>Det kan g&amp;oslash;re siden langsommere at indl&amp;aelig;se.<\/p>\n<p>&lt;P&gt;<\/p>\n<p>&lt;INPUT TYPE = CheckBox NAME = billeder&gt;Billeder&lt;BR&gt;<\/p>\n<p>&lt;INPUT TYPE = CheckBox NAME = lyd&gt;Lyd&lt;BR&gt;<\/p>\n<p>&lt;INPUT TYPE = Button NAME = ok VALUE = &#8220;Vis siden&#8221; ONCLICK = &#8220;visSide();&#8221;&gt;<\/p>\n<p>&lt;\/FORM&gt;<\/p>\n<p>&lt;\/BODY&gt;<\/p>\n<p>&lt;\/HTML&gt;<\/p>\n<p>\u00a0<\/p>\n<p><strong>Eksempel 2 <\/strong><\/p>\n<p>&lt;HTML&gt;<\/p>\n<p>&lt;HEAD&gt;&lt;TITLE&gt;Eksempel 2&lt;\/TITLE&gt;&lt;\/HEAD&gt;<\/p>\n<p>\u00a0<\/p>\n<p>&lt;SCRIPT Language = JavaScript&gt;<\/p>\n<p>\u00a0<\/p>\n<p>function kontrollerNavn()<\/p>\n<p>{<\/p>\n<p>\u00a0 if (formular.navn.value == &#8220;&#8221;)<\/p>\n<p>\u00a0 {<\/p>\n<p>\u00a0\u00a0\u00a0 alert(&#8220;De skal indtaste Deres navn&#8221;);<\/p>\n<p>\u00a0\u00a0\u00a0 formular.navn.focus();<\/p>\n<p>\u00a0 }<\/p>\n<p>}<\/p>\n<p>\u00a0<\/p>\n<p>function kontrollerAdresse()<\/p>\n<p>{<\/p>\n<p>\u00a0 if (formular.adresse.value == &#8220;&#8221;)<\/p>\n<p>\u00a0 {<\/p>\n<p>\u00a0\u00a0\u00a0 alert(&#8220;De skal indtaste Deres adresse&#8221;);<\/p>\n<p>\u00a0\u00a0\u00a0 formular.adresse.focus();<\/p>\n<p>\u00a0 }<\/p>\n<p>}<\/p>\n<p>\u00a0<\/p>\n<p>function knappeClick()<\/p>\n<p>{<\/p>\n<p>\u00a0 kontrollerNavn();<\/p>\n<p>\u00a0 kontrollerAdresse();<\/p>\n<p>}<\/p>\n<p>\u00a0<\/p>\n<p>&lt;\/SCRIPT&gt;<\/p>\n<p>\u00a0<\/p>\n<p>&lt;BODY&gt;<\/p>\n<p>&lt;FORM NAME = formular&gt;<\/p>\n<p>&lt;TABLE&gt;<\/p>\n<p>&lt;TD&gt;Navn:&lt;\/TD&gt;<\/p>\n<p>&lt;TD&gt;&lt;INPUT TYPE = Text NAME = navn OnBlur = kontrollerNavn();&gt;&lt;\/TD&gt;<\/p>\n<p>\u00a0<\/p>\n<p>&lt;TR&gt;<\/p>\n<p>\u00a0<\/p>\n<p>&lt;TD&gt;Adresse:&lt;\/TD&gt;<\/p>\n<p>&lt;TD&gt;&lt;INPUT TYPE = Text NAME = adresse OnBlur = kontrollerAdresse();&gt;&lt;\/TD&gt;<\/p>\n<p>\u00a0<\/p>\n<p>&lt;TR&gt;<\/p>\n<p>&lt;TD COLSPAN = 2&gt;&lt;CENTER&gt;&lt;INPUT TYPE = Button NAME = ok VALUE = OK OnClick = knappeClick();&gt;&lt;\/CENTER&gt;&lt;\/TD&gt;<\/p>\n<p>&lt;\/TABLE&gt;<\/p>\n<p>&lt;\/FORM&gt;<\/p>\n<p>&lt;\/BODY&gt;<\/p>\n<p>&lt;\/HTML&gt;<\/p>\n<p>\u00a0<\/p>\n<p><strong>Eksempel 3<\/strong><\/p>\n<p>&lt;HTML&gt;<\/p>\n<p>&lt;HEAD&gt;&lt;TITLE&gt;Eksempel 3&lt;\/TITLE&gt;&lt;\/HEAD&gt;<\/p>\n<p>\u00a0<\/p>\n<p>&lt;SCRIPT Language = JavaScript&gt;<\/p>\n<p>\u00a0<\/p>\n<p>function velkommen()<\/p>\n<p>{<\/p>\n<p>\u00a0 alert(&#8220;Velkommen til min hjemmeside. Jeg h\u00e5ber, du m\u00e5 hygge dig&#8230;&#8221;);<\/p>\n<p>}<\/p>\n<p>\u00a0<\/p>\n<p>function farvel()<\/p>\n<p>{<\/p>\n<p>\u00a0 alert(&#8220;Tak for bes\u00f8get. Kom snart igen.&#8221;);<\/p>\n<p>}<\/p>\n<p>\u00a0<\/p>\n<p>&lt;\/SCRIPT&gt;<\/p>\n<p>\u00a0<\/p>\n<p>&lt;BODY OnLoad = velkommen(); OnUnload = farvel();&gt;<\/p>\n<p>\u00a0<\/p>\n<p>Tjah&#8230;det var s\u00e5 den hjemmeside&#8230;<\/p>\n<p>&lt;\/BODY&gt;<\/p>\n<p>&lt;\/HTML&gt;<\/p>\n<p>\u00a0<\/p>\n<p><strong>Eksempel 4 <\/strong><\/p>\n<p>&lt;HTML&gt;<\/p>\n<p>&lt;HEAD&gt;&lt;TITLE&gt;Eksempel 4&lt;\/TITLE&gt;&lt;\/HEAD&gt;<\/p>\n<p>&lt;BODY OnLoad = fadeIn(); OnUnload = fadeOut();&gt;<\/p>\n<p>\u00a0<\/p>\n<p>&lt;SCRIPT Language = JavaScript&gt;<\/p>\n<p>\u00a0<\/p>\n<p>function fadeIn()<\/p>\n<p>{<\/p>\n<p>\u00a0 for (farve = 0; farve &lt; 0xFFFFFF; farve = farve + 0x010101)<\/p>\n<p>\u00a0\u00a0\u00a0 document.bgColor = farve;<\/p>\n<p>}<\/p>\n<p>\u00a0<\/p>\n<p>function fadeOut()<\/p>\n<p>{<\/p>\n<p>\u00a0 for (farve = 0xFFFFFF; farve &gt; 0; farve = farve &#8211; 0x010101)<\/p>\n<p>\u00a0\u00a0\u00a0 document.bgColor = farve;<\/p>\n<p>}<\/p>\n<p>\u00a0<\/p>\n<p>&lt;\/SCRIPT&gt;<\/p>\n<p>\u00a0<\/p>\n<p>&lt;\/BODY&gt;<\/p>\n<p>&lt;\/HTML&gt;<\/p>\n<p>\u00a0<\/p>\n<p><strong>Eksempel 5 <\/strong><\/p>\n<p>&lt;HTML&gt;<\/p>\n<p>&lt;HEAD&gt;&lt;TITLE&gt;Det afsluttende eksempel&lt;\/TITLE&gt;&lt;\/HEAD&gt;<\/p>\n<p>\u00a0<\/p>\n<p>&lt;SCRIPT Language = JavaScript&gt;<\/p>\n<p>\u00a0<\/p>\n<p>\/\/ Globale variable<\/p>\n<p>\u00a0<\/p>\n<p>s = &#8220;&#8221;;<\/p>\n<p>scrollTekst = &#8220;&#8221;;<\/p>\n<p>hastighed = 0;<\/p>\n<p>\u00a0<\/p>\n<p>\/\/ Slut p\u00e5 globale variable<\/p>\n<p>\u00a0<\/p>\n<p>function kontrollerTekst()<\/p>\n<p>{<\/p>\n<p>\u00a0 if (indstillinger.tekst.value == &#8220;&#8221;)<\/p>\n<p>\u00a0 {<\/p>\n<p>\u00a0\u00a0\u00a0 alert(&#8220;Indtast venligst en tekst, inden De forlader feltet.&#8221;);<\/p>\n<p>\u00a0\u00a0\u00a0 indstillinger.tekst.focus();<\/p>\n<p>\u00a0 }<\/p>\n<p>}<\/p>\n<p>\u00a0<\/p>\n<p>function kontrollerHastighed()<\/p>\n<p>{<\/p>\n<p>\u00a0 if (indstillinger.hastighed.value == &#8220;&#8221;)<\/p>\n<p>\u00a0 {\u00a0<\/p>\n<p>\u00a0\u00a0\u00a0 alert(&#8220;Indtast venligst en hastighed, inden De forlader feltet.&#8221;);<\/p>\n<p>\u00a0\u00a0\u00a0 indstillinger.hastighed.focus();<\/p>\n<p>\u00a0 }<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0 if (isNaN (indstillinger.hastighed.value))<\/p>\n<p>\u00a0 {<\/p>\n<p>\u00a0\u00a0\u00a0 alert(&#8220;Indtast venligst hastigheden ved hj\u00e6lp af tal.&#8221;);<\/p>\n<p>\u00a0\u00a0\u00a0 indstillinger.hastighed.focus();<\/p>\n<p>\u00a0 }<\/p>\n<p>}<\/p>\n<p>\u00a0<\/p>\n<p>function startClick()<\/p>\n<p>{<\/p>\n<p>\u00a0 s = &#8220;&#8221;;<\/p>\n<p>\u00a0 scrollTekst = indstillinger.tekst.value;<\/p>\n<p>\u00a0 hastighed = indstillinger.hastighed.value;<\/p>\n<p>\u00a0 window.setTimeout (&#8220;scroll();&#8221;, hastighed);<\/p>\n<p>}<\/p>\n<p>\u00a0<\/p>\n<p>function scroll()<\/p>\n<p>{<\/p>\n<p>\u00a0\u00a0<\/p>\n<p>\u00a0 if (s.length == scrollTekst.length)<\/p>\n<p>\u00a0\u00a0\u00a0 s = &#8220;&#8221;;<\/p>\n<p>\u00a0 else<\/p>\n<p>\u00a0\u00a0\u00a0 s = scrollTekst.substring(0, s.length + 1);<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0<\/p>\n<p>\u00a0 window.status = s;<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0 timeOut = window.setTimeout (&#8220;scroll();&#8221;, hastighed);<\/p>\n<p>}<\/p>\n<p>\u00a0<\/p>\n<p>&lt;\/SCRIPT&gt;<\/p>\n<p>\u00a0<\/p>\n<p>&lt;BODY&gt;<\/p>\n<p>&lt;FORM NAME = indstillinger&gt;<\/p>\n<p>&lt;TABLE&gt;<\/p>\n<p>&lt;TD&gt;Indtast den tekst, der skal vises i statusvinduet&lt;\/TD&gt;<\/p>\n<p>&lt;TD&gt;&lt;INPUT TYPE = Text NAME = tekst SIZE = 50 VALUE = &#8220;Dette er det afsluttende eksempel&#8230;&#8221; OnBlur = kontrollerTekst();&gt;&lt;\/TD&gt;<\/p>\n<p>\u00a0<\/p>\n<p>&lt;TR&gt;<\/p>\n<p>\u00a0<\/p>\n<p>&lt;TD&gt;Indtast hastigheden i millisekunder&lt;\/TD&gt;<\/p>\n<p>&lt;TD&gt;&lt;INPUT TYPE = Text NAME = hastighed SIZE = 50 VALUE = 250 OnBlur = kontrollerHastighed();&gt;&lt;\/TD&gt;<\/p>\n<p>\u00a0<\/p>\n<p>&lt;TR&gt;<\/p>\n<p>\u00a0<\/p>\n<p>&lt;TD COLSPAN = 2&gt;&lt;CENTER&gt;<\/p>\n<p>&lt;INPUT TYPE = Button NAME = opdater VALUE = &#8220;Opdater&#8221; OnClick = startClick();&gt;<\/p>\n<p>&lt;\/TD&gt;<\/p>\n<p>&lt;\/TABLE&gt;<\/p>\n<p>&lt;\/BODY&gt;<\/p>\n<p>&lt;\/HTML&gt;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Afsluttende JavaScript \u00a0 I denne sidste artikel i Computer PCs JavaScript-kursus fort\u00e6ller Kristian Hansen, hvordan man kan lade JavaScript-programmer styre formularer og i \u00f8vrigt integrere dem med sine HTML-dokumenter. De tidligere afsnit af dette JavaScript-kursus har gennemg\u00e5et, hvordan man skriver sine egne JavaScript-funktioner og programmer, og hvordan man g\u00f8r brug af de, der allerede findes [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":30,"menu_order":0,"comment_status":"closed","ping_status":"open","template":"","meta":{"_monsterinsights_skip_tracking":false,"footnotes":""},"class_list":["post-132","page","type-page","status-publish","hentry"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.kristiansborg.dk\/bibliotek\/artikler\/it\/l%c3%a6r-javascript-3-afsluttende-javascript\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Biblioteket | Samling af artikler og b\u00f8ger\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"L\u00e6r Javascript 3: Afsluttende Javascript | Biblioteket\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.kristiansborg.dk\/bibliotek\/artikler\/it\/l%c3%a6r-javascript-3-afsluttende-javascript\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2008-10-22T13:01:55+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2008-10-22T13:01:55+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"L\u00e6r Javascript 3: Afsluttende Javascript | Biblioteket\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/artikler\\\/it\\\/l%c3%a6r-javascript-3-afsluttende-javascript\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/artikler\\\/#listItem\",\"name\":\"Artikler\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/artikler\\\/#listItem\",\"position\":2,\"name\":\"Artikler\",\"item\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/artikler\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/artikler\\\/it\\\/#listItem\",\"name\":\"IT\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/artikler\\\/it\\\/#listItem\",\"position\":3,\"name\":\"IT\",\"item\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/artikler\\\/it\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/artikler\\\/it\\\/l%c3%a6r-javascript-3-afsluttende-javascript\\\/#listItem\",\"name\":\"L\\u00e6r Javascript 3: Afsluttende Javascript\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/artikler\\\/#listItem\",\"name\":\"Artikler\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/artikler\\\/it\\\/l%c3%a6r-javascript-3-afsluttende-javascript\\\/#listItem\",\"position\":4,\"name\":\"L\\u00e6r Javascript 3: Afsluttende Javascript\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/artikler\\\/it\\\/#listItem\",\"name\":\"IT\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/#organization\",\"name\":\"Biblioteket\",\"description\":\"Samling af artikler og b\\u00f8ger\",\"url\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/artikler\\\/it\\\/l%c3%a6r-javascript-3-afsluttende-javascript\\\/#webpage\",\"url\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/artikler\\\/it\\\/l%c3%a6r-javascript-3-afsluttende-javascript\\\/\",\"name\":\"L\\u00e6r Javascript 3: Afsluttende Javascript | Biblioteket\",\"inLanguage\":\"da-DK\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/artikler\\\/it\\\/l%c3%a6r-javascript-3-afsluttende-javascript\\\/#breadcrumblist\"},\"datePublished\":\"2008-10-22T15:01:55+02:00\",\"dateModified\":\"2008-10-22T15:01:55+02:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/#website\",\"url\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/\",\"name\":\"Biblioteket\",\"description\":\"Samling af artikler og b\\u00f8ger\",\"inLanguage\":\"da-DK\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"L\u00e6r Javascript 3: Afsluttende Javascript | Biblioteket","description":"","canonical_url":"https:\/\/www.kristiansborg.dk\/bibliotek\/artikler\/it\/l%c3%a6r-javascript-3-afsluttende-javascript\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BreadcrumbList","@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/artikler\/it\/l%c3%a6r-javascript-3-afsluttende-javascript\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/www.kristiansborg.dk\/bibliotek#listItem","position":1,"name":"Home","item":"https:\/\/www.kristiansborg.dk\/bibliotek","nextItem":{"@type":"ListItem","@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/artikler\/#listItem","name":"Artikler"}},{"@type":"ListItem","@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/artikler\/#listItem","position":2,"name":"Artikler","item":"https:\/\/www.kristiansborg.dk\/bibliotek\/artikler\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/artikler\/it\/#listItem","name":"IT"},"previousItem":{"@type":"ListItem","@id":"https:\/\/www.kristiansborg.dk\/bibliotek#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/artikler\/it\/#listItem","position":3,"name":"IT","item":"https:\/\/www.kristiansborg.dk\/bibliotek\/artikler\/it\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/artikler\/it\/l%c3%a6r-javascript-3-afsluttende-javascript\/#listItem","name":"L\u00e6r Javascript 3: Afsluttende Javascript"},"previousItem":{"@type":"ListItem","@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/artikler\/#listItem","name":"Artikler"}},{"@type":"ListItem","@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/artikler\/it\/l%c3%a6r-javascript-3-afsluttende-javascript\/#listItem","position":4,"name":"L\u00e6r Javascript 3: Afsluttende Javascript","previousItem":{"@type":"ListItem","@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/artikler\/it\/#listItem","name":"IT"}}]},{"@type":"Organization","@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/#organization","name":"Biblioteket","description":"Samling af artikler og b\u00f8ger","url":"https:\/\/www.kristiansborg.dk\/bibliotek\/"},{"@type":"WebPage","@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/artikler\/it\/l%c3%a6r-javascript-3-afsluttende-javascript\/#webpage","url":"https:\/\/www.kristiansborg.dk\/bibliotek\/artikler\/it\/l%c3%a6r-javascript-3-afsluttende-javascript\/","name":"L\u00e6r Javascript 3: Afsluttende Javascript | Biblioteket","inLanguage":"da-DK","isPartOf":{"@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/#website"},"breadcrumb":{"@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/artikler\/it\/l%c3%a6r-javascript-3-afsluttende-javascript\/#breadcrumblist"},"datePublished":"2008-10-22T15:01:55+02:00","dateModified":"2008-10-22T15:01:55+02:00"},{"@type":"WebSite","@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/#website","url":"https:\/\/www.kristiansborg.dk\/bibliotek\/","name":"Biblioteket","description":"Samling af artikler og b\u00f8ger","inLanguage":"da-DK","publisher":{"@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/#organization"}}]},"og:locale":"da_DK","og:site_name":"Biblioteket | Samling af artikler og b\u00f8ger","og:type":"article","og:title":"L\u00e6r Javascript 3: Afsluttende Javascript | Biblioteket","og:url":"https:\/\/www.kristiansborg.dk\/bibliotek\/artikler\/it\/l%c3%a6r-javascript-3-afsluttende-javascript\/","article:published_time":"2008-10-22T13:01:55+00:00","article:modified_time":"2008-10-22T13:01:55+00:00","twitter:card":"summary","twitter:title":"L\u00e6r Javascript 3: Afsluttende Javascript | Biblioteket"},"aioseo_meta_data":{"post_id":"132","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"location":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":null,"created":"2020-12-21 06:59:27","updated":"2025-06-04 00:54:23","seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.kristiansborg.dk\/bibliotek\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.kristiansborg.dk\/bibliotek\/artikler\/\" title=\"Artikler\">Artikler<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.kristiansborg.dk\/bibliotek\/artikler\/it\/\" title=\"IT\">IT<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tL\u00e6r Javascript 3: Afsluttende Javascript\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.kristiansborg.dk\/bibliotek"},{"label":"Artikler","link":"https:\/\/www.kristiansborg.dk\/bibliotek\/artikler\/"},{"label":"IT","link":"https:\/\/www.kristiansborg.dk\/bibliotek\/artikler\/it\/"},{"label":"L\u00e6r Javascript 3: Afsluttende Javascript","link":"https:\/\/www.kristiansborg.dk\/bibliotek\/artikler\/it\/l%c3%a6r-javascript-3-afsluttende-javascript\/"}],"_links":{"self":[{"href":"https:\/\/www.kristiansborg.dk\/bibliotek\/wp-json\/wp\/v2\/pages\/132","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kristiansborg.dk\/bibliotek\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.kristiansborg.dk\/bibliotek\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.kristiansborg.dk\/bibliotek\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kristiansborg.dk\/bibliotek\/wp-json\/wp\/v2\/comments?post=132"}],"version-history":[{"count":0,"href":"https:\/\/www.kristiansborg.dk\/bibliotek\/wp-json\/wp\/v2\/pages\/132\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/www.kristiansborg.dk\/bibliotek\/wp-json\/wp\/v2\/pages\/30"}],"wp:attachment":[{"href":"https:\/\/www.kristiansborg.dk\/bibliotek\/wp-json\/wp\/v2\/media?parent=132"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}