87
Gestaltung von Webseiten mit JavaScript Einleitung JavaScript-Kern Datentypen Kontrollstrukturen Funktionen Objekte Felder Reguläre Ausdrücke Client-seitiges JavaScript Windows und Frames Dokument-Objekt-Modell Formulare Ereignisbehandlung Cookies Beispiele JavaScript Dirk Husung Gestaltung von Webseiten mit JavaScript (1)

JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

  • Upload
    dinhdan

  • View
    224

  • Download
    1

Embed Size (px)

Citation preview

Page 1: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

Gestaltung von Webseiten mit

JavaScript

• Einleitung

• JavaScript-Kern

◦ Datentypen

◦ Kontrollstrukturen

◦ Funktionen

◦ Objekte

◦ Felder

◦ Reguläre Ausdrücke

• Client-seitiges JavaScript

◦ Windows und Frames

◦ Dokument-Objekt-Modell

◦ Formulare

◦ Ereignisbehandlung

◦ Cookies

• Beispiele

JavaScriptDirk Husung

Gestaltung von Webseiten mit JavaScript (1)

Page 2: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

1 Einleitung

JavaScript ist eine (typischerweise) durch WWW-Browser interpretierte, in HTML integrierbare Pro-grammiersprache, von Netscape entwickelt und li-zensiert.

Unterschieden werden JavaScript-Kern, Client-sei-tiges („LiveScript“), und Server-seitiges JavaScript(„LiveWire“, Active Server Pages (ASP) bei Micro-soft).

Client-seitiges JavaScript umfaßt neben dem Java-Script-Kern u.a. Window- und Form-Objekte sowieein Dokument-Objekt-Modell.

Server-seitiges JavaScript stellt File-, Database-,Request- und Client-Objekte zur Verfügung und bil-det (eine herstellerabhängige) Alternative zu CGI-Skripten.

Im folgenden sollen der JavaScript-Kern und Client-seitiges JavaScript betrachtet werden.

JavaScriptDirk Husung

Einleitung (2)

Page 3: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

JavaScript lehnt sich in seiner Syntax (wie Java) anC an.

Ab der Version 1.3 ist JavaScript vollständig kon-form zu den internationalen Standards ECMA-2621

und ISO-162622.

Der MS Internet-Explorer interpretiert tatsächlicheine Sprachvariante, JScript, die spezielle Befeh-le für Betriebssystemerweiterungen bereitstellt.

Was kann JavaScript?

• JavaScript stellt eine vollwertige Programmier-sprache dar.

Es unterstützt beliebige Berechnungen mit ei-ner Vielzahl von Standardfunktionen.

• Event-Handler erlauben es, auf Benutzereinga-ben über Tastatur oder Maus zu reagieren.

• Mit Hilfe des Window-Objekts ist es möglich,neue Browser-Fenster zu erzeugen, zu öffnenund zu schließen.

1ECMA: European Computer Manufacturers Association2ISO: International Organization for Standards

JavaScriptDirk Husung

Einleitung (3)

Page 4: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

• Im einfachsten Fall lassen sich vordefiniertePopup-Dialogboxen anzeigen, etwa bevor einBenutzer ein wichtiges Formular versendet.

• Im allgemeinen können Größe und Position so-wie Kontrollelemente eines neuen Fensters vor-gegeben werden.

• Das Dokument-Objekt-Modell bietet Zugriff aufeine Hierarchie von Objekten, entsprechenddem Inhalt einer Web-Seite.

Unter Ausnutzung des Dokument-Objekt-Mo-dells ist es möglich, Dokumente von Grund aufvollständig aufzubauen.

IE 4 unterstützt ein vollständiges Dokument-Ob-jekt-Modell, das es gestattet, Inhalt und Ausse-hen eines jeden Elements zu modifizieren.

• document.write() fügt beliebigen HTML-Code in ein Dokument ein, zu dem Zeitpunkt,zu dem die Seite von dem Browser analysiertwird.

• Das Form-Objekt erlaubt den Zugriff auf HTML-Formulare, insbesondere Button-, CheckBox-,

JavaScriptDirk Husung

Einleitung (4)

Page 5: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

Hidden-, Password-, Radio-, Reset-, Select-,Submit-, Text- und TextArea-Elemente.

Damit gestattet JavaScript die Konsistenzprü-fung von Formularen vor ihrer Versendung unddie Vorverarbeitung von Eingaben.

• JavaScript kann steuern, welche Web-Seiten imBrowser angezeigt werden.

• Das History-Objekt stellt die Funktionalität desForward- und Back-Buttons zur Verfügung.

• Es ist möglich, beliebige Meldungen in der Sta-tuszeile des Browser-Fensters anzuzeigen, et-wa wenn der Benutzer die Maus über einen Hy-pertextlink bewegt.

• Ein Navigator-Objekt liefert Rechner-Plattform,Name und Version des Browsers.

• JavaScript erlaubt es, Cookies zu schreiben undzu lesen: einige wenige Zustandsdaten, die tem-porär oder dauerhaft durch den Client gespei-chert werden.

JavaScriptDirk Husung

Einleitung (5)

Page 6: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

Seit JavaScript 1.1:

• Austausch eines per IMG-Tag angezeigten Bil-des

• Zusammenarbeit mit Java Applets

• Scrollen von Fensterinhalten

Seit JavaScript 1.2:

• Modell zur Ereignisbehandlung

• Style-Sheets

• dynamische Positionierung

• reguläre Ausdrücke

• switch-Anweisung

• delete-Operator

• Ein Screen-Objekt liefert Größe und Farbtiefedes verwendeten Bildschirms

• Verschieben und Verändern der Größe von Fen-stern

JavaScriptDirk Husung

Einleitung (6)

Page 7: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

Was kann JavaScript nicht?

• JavaScript bietet keine Grafikfunktionen über dievordefinierten GUI-Elemente hinaus.

• JavaScript kennt keine Methoden, die es gestat-ten, Frames direkt zu erzeugen oder zu verän-dern.

Versionen

JavaScript Navigator Internet Explorer

JavaScript 1.0 Navigator 2.0 Explorer 3.0JavaScript 1.1 Navigator 3.0 Explorer 4.0JavaScript 1.2 Navigator 4.0–4.05 Explorer 4.0, teilw.JavaScript 1.3 Navigator 4.06–4.5

JavaScriptDirk Husung

Einleitung (7)

Page 8: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

1.1 Einführendes Beispiel

Einfache JavaScript-Eingaben können über einJavaScript-Pseudo-Protokoll erfolgen:

javascript: URL

Bei dem Netscape Navigator öffnet die alleinige Ein-gabe von

javascript:

als URL eine JavaScript-Konsole.

Integration von JavaScript in eine HTML-Datei:

<html><head><title>JavaScript-Test</title><script language="JavaScript"><!--function Quadrat (Zahl) {Ergebnis = Zahl * Zahl;alert (Zahl + "^2 = " + Ergebnis);

}//--></script></head><body><form><input type=buttonvalue="Quadrat von 7 errechnen"onClick="Quadrat(7)">

</form></body></html>

JavaScriptDirk Husung

Einführendes Beispiel (1)

Page 9: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

Alternativ können JavaScripte in eigenen Dateiengespeichert werden:

<html><head><title>JavaScript-Test</title><script language="JavaScript"src="quadrat.js" type="text/javascript">

</script></head><body><form><input type=buttonvalue="Quadrat von 6 errechnen"onClick="Quadrat(6)">

</form></body></html>

JavaScript-Debugger stehen zur Verfügung unter:

http://developer.netscape.com/products/jsdebug/http://www.microsoft.com/scripting/debugger/

JavaScriptDirk Husung

Einführendes Beispiel (2)

Page 10: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

2 Lexikalische Elemente

• JavaScript ignoriert Zwischenraumzeichen zwi-schen Sprachelementen.

• Grundsätzlich wird jede Anweisung durch einSemikolon abgeschlossen. Ein Semikolon hin-ter der letzten Anweisung einer Zeile ist optio-nal.

Kommentare

// Kommentar bis zum Zeilende/* Kommentar über mehrere Zeilen,

nicht schachtelbar */<!-- Kommentar bis zum Zeilenende//-->

Bezeichner

• Folge von Buchstaben und Ziffern, beginnendmit einem Buchstaben; „_“ und „$“ (seit Java-Script 1.1) zählen zu den Buchstaben. Zulässigsind nur ASCII-Zeichen (keine Umlaute).

JavaScriptDirk Husung

Lexikalische Elemente (1)

Page 11: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

• Unterscheidung zwischen Groß- und Kleinbuch-staben (im Gegensatz zu HTML).Ausnahmen sind bei Client-seitigem JavaScriptmöglich (JavaScript Style-Sheets in Navigator 4:document.tag.BODY.COLOR = "red";)

• Maximallänge 32 Zeichen

Reservierte Schlüsselwörter

abstractbooleanbreakbytecasecatchcharclassconstcontinuedebuggerdefaultdeletedodouble

elseenumexportextendsfalsefinalfinallyfloatforfunctiongotoifimplementsimportin

instanceofintinterfacelongnativenewnullpackageprivateprotectedpublicreturnshortstaticsuper

switchsynchronizedthisthrowthrowstransienttruetrytypeofvarvoidvolatilewhilewith

JavaScriptDirk Husung

Lexikalische Elemente (2)

Page 12: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

3 Datentypen

JavaScript unterscheidet

• primitive Datentypen

◦ (Gleitkomma-)Zahlen

◦ Boolsche Werte: true und false

◦ Zeichenketten

• zusammengesetzte Datentypen

◦ Objekte

◦ Felder

• Funktionen

Felder und Funktionen stellen spezielle Objekte dar.

Primitive und Referenzdatentypen

Ein primitiver Datentyp speichert seinen Wert selbst;jede Variable eines primitiven Datentyps belegt ei-ne feste Speicherplatzgröße.

JavaScriptDirk Husung

Datentypen (1)

Page 13: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

Ein Referenz-Datentyp speichert einen Verweis aufseinen Wert; Variablen desselben Referenz-Daten-typs können unterschiedlich viel Speicherplatz be-legen. Verschiedene Referenzvariablen können aufdenselben Wert verweisen.

Objekte, Felder und Funktionen sind als Referenz-datentypen implementiert.

Zeichenketten können als unveränderlicher Refe-renztyp betrachtet werden.

JavaScriptDirk Husung

Datentypen (2)

Page 14: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

3.1 Zahlen

stellt JavaScript stets im 8-Byte-IEEE-Gleitkomma-format dar.

Es gibt keinen gesonderten Ganzzahltyp, auchwenn die meisten ganzzahligen Operationen auf32-Bit-Werten ausgeführt werden.

• Die mathematischen Standardfunktionen sindals Eigenschaften des Math-Objekts gespeichert.

c = Math.sqrt (a*a + b*b);

• Eine Zahl kann mittels toString() in eine Zei-chenkette konvertiert werden:

x = 10;s = x.toString(2); // zur Basis 2

Spezielle Werte

Wert Bedeutung

Number.MAX_VALUE größte darstellbare ZahlNumber.MIN_VALUE kleinste negative ZahlNumber.NaN „not a number“Number.POSITIVE_INFINITY +∞Number.NEGATIVE_INFINITY −∞

JavaScriptDirk Husung

Zahlen (1)

Page 15: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

3.2 Zeichenketten

(Konstantenschreibweise s.u.)

JavaScript kennt keinen gesonderten Zeichentyp.

• „+“ dient dem Aneinanderhängen von Zeichen-ketten; ggf. wird dabei ein numerischer Wert ineine Zeichenkette umgewandelt.

Achtung:

"37" + 7 // liefert 377"37" - 7 // liefert 30

• s.length liefert die Anzahl der Zeichen einerZeichenkette s.

• Einige Methoden:

s.charAt(s.length-1);s.substring(1,4);s.indexOf(’a’);

• Navigator 4 (nicht aber IE 4) unterstützt den Zu-griff auf einzelne Zeichen wie auf Feldelemente:

s[s.length-1];

JavaScriptDirk Husung

Zeichenketten (1)

Page 16: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

3.3 Boolsche Werte

sind in der Regel das Ergebnis von Vergleichsope-ratoren.

Obwohl JavaScript im Gegensatz zu C einen ei-genständigen boolschen Datentyp kennt, erfolgt imBedarfsfall eine implizite Typumwandlung vonfalse in 0 und von true in 1.

JavaScriptDirk Husung

Boolsche Werte (2)

Page 17: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

3.4 Objekte

stellen eine Sammlung benannter Komponenten dar.Dies können Daten (Zustand) oder Funktionen (Ver-halten) sein.

image.widthimage.height

document.write("text");

Objekte in JavaScript können als assoziative Fel-der dienen.

image["width"]image["height"]

Objekte werden durch spezielle Konstruktorfunktio-nen erzeugt:

var o = new Object();

Seit JavaScript 1.2 können Objekte mit einer Inti-tialisierungssyntax eingeführt werden:

var point = { x:2.3, y:-1.2 };

JavaScriptDirk Husung

Objekte (1)

Page 18: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

Für die Werte der Komponenten können beliebigeAusdrücke angegeben werden.

Wrapper-Objekte

Zu jedem der primitiven Datentypen gibt es eineensprechende Wrapper-Objektklasse. Ein Wrapper-Objekt nimmt den Wert einer Variable eines primi-tiven Typs auf, stellt jedoch zusätzliche Komponen-ten zur Verfügung.

JavaScript konvertiert implizit je nach Kontext pri-mitive Variablen vorübergehend in Wrapper-Objekteund umgekehrt.

len = s.length;

S = new String ("Hello, World");msg = S + ’!’;

JavaScriptDirk Husung

Objekte (2)

Page 19: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

3.5 Felder

stellen eine Sammlung indizierter Feldelemente dar.Die Indizierung erfolgt mit natürlichen Zahlen, be-ginnend bei 0. Die Feldelemente können beliebi-gen Typ besitzen (heterogene Felder).

Erzeugen eines Feldes

var a = new Array();a[0] = 1.2;a[1] = "JavaScript";

Seit JavaScript 1.2 können Felder mit einer Initiali-siserungssyntax eingeführt werden:

var a = [ 1.2, "JavaScript" ];

Für die Werte der Feldelemente können beliebigeAusdrücke angegeben werden.

Auslassen eines Initialwertes bewirkt ein undefinier-tes Element.

Achtung: Navigator 4 besitzt folgenden Fehler: Wirdin der Initialisierungssyntax nur ein einzelnes Ele-ment angegeben, legt dessen Wert die anfänglicheZahl der Feldelemente fest.

JavaScriptDirk Husung

Felder (1)

Page 20: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

3.6 Funktionen

stellen in JavaScript erstrangige Datentypen dar:Sie können in Variablen, Feldern und Objekten ge-speichert und anderen Funktionen als Argumenteübergeben werden.

Eine Funktion, die als Eigenschaft eines Objektsgespeichert ist, heißt Methode .

Event-Handler sind Methoden spezieller Objektein Client-seitigem JavaScript, die vom Web-Browseraufgrund entsprechender Benutzeraktionen aufge-rufen werden.

function square(x) {return x*x;

}

Seit JavaScript 1.2 können Funktionsdefinitionengeschachtelt werden.

Eine Funktion kann mit einem Konstruktor erzeugtwerden.

var square =new Function ("x", "return x*x");

JavaScriptDirk Husung

Funktionen (1)

Page 21: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

Die führenden Argumente bennen die Parameter,das letzte Argument beschreibt den Funktionsrumpf.

square hält einen Verweis auf die erzeugte Funk-tion, die Funktion selbst ist „anonym“.

JavaScript 1.2 unterstützt Lamda-Funktionen, eineKonstantenschreibweise für Funktionen:

var square = function(x) { return x*x; }

JavaScriptDirk Husung

Funktionen (2)

Page 22: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

3.7 null und undefined

Der Wert null bedeutet, daß eine Variable keinengültigen Wert besitzt.

Der Wert undefined ergibt sich bei Benutzung ei-ner nicht existierenden oder nicht initialisierten Va-riable oder Methode.

Es gibt kein Schlüsselwort undefined. Bei ei-nem Vergleich werden null und undefined alsgleich behandelt, der typeof-Operator (ab Java-Script 1.1) liefert jedoch:

type = typeof null; // "object"

var undefined;type = typeof undefined; // "undefined"

JavaScriptDirk Husung

null und undefined (1)

Page 23: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

3.8 Konstanten

Zahlen

ganzzahlige Werte:

42 (Basis 10), 0x1234 (Basis 16), 007 (Basis 8)

Gleitkommawerte:

3.1415, -3.1E12, .1e12, oder 2E-12

Boolsche Werte

true, false

Zeichenketten

"123", ’eins zwei drei’

Da HTML sehr oft doppelte Anführungszeichen ver-wendet, sind für JavaScript einfache empfehlens-wert. Ein Apostroph ist dann als „\’“ mit einemBackslash zu schreiben.

JavaScriptDirk Husung

Konstanten (1)

Page 24: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

Spezielle Zeichen

\b Backspace\f Seitenvorschub (form feed)\n Zeilenende (new line)\r Zeilenrücklauf (carriage return)\t horizontaler Tabulator\\ Fluchtsymbol (backslash)\’ Apostroph (quote)\" Anführungszeichen (double quote)\ddd ASCII-Zeichen in oktaler Notation\xdd ASCII-Zeichen in hexidezimaler Notation\udddd Unicode-Zeichen in hexidezimaler Notati-

on (ab Version 1.3)

Felder

array = ["eins", , "drei"];// array[0] besitzt den Wert "eins"

Objekte

Eine Objektkonstante besteht aus einer Liste vonPaaren aus Schlüsselnamen und assoziierten Wer-ten, eingeschlossen in „{ }“.

JavaScriptDirk Husung

Konstanten (2)

Page 25: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

var Sales = "Toyota";

function CarTypes(name) {if(name == "Honda")return name;

elsereturn "Sorry, we don’t sell "+ name + ".";

}car = {myCar: "Saturn",

getCar: CarTypes("Honda"),special: Sales}

document.write(car.myCar); // Saturndocument.write(car.getCar); // Hondadocument.write(car.special); // Toyota

Spezielle Konstanten

null

JavaScriptDirk Husung

Konstanten (3)

Page 26: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

3.9 Variablen

Eine Variable verknüpft einen Namen mit einem Wert.

Dynamische Typisierung

In JavaScript können derselben Variablen Werteunterschiedlichen Typs zugewiesen werden.

i = 1;i = "one";

Je nach Kontext führt JavaScript implizit Typkonver-tierungen durch.

null bedeutet 0 in numerischem, false in bool-schem Kontext,undefined bedeutet false in boolschem Kon-text.

Deklaration

Variablen können außerhalb von Funktionen (glo-bal) oder innerhalb einer Funktion (lokal) erklärtwerden.

Globale Variablen lassen sich durch einfache Wert-zuweisung einführen, optional mit dem Schlüssel-wort var, lokale Variablen sind stets mit var ein-zuführen.

JavaScriptDirk Husung

Variablen (1)

Page 27: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

var i;

Eine Wertzuweisung an eine nicht mit var dekla-rierte Variable definiert ein globale Variable.

Der Versuch, den Wert einer nicht mit var dekla-rierten Variable zu lesen, führt zu einem Laufzeit-fehler.

Variablen können bei ihrer Deklaration initialisiertwerden.

var i = 0, k = 0;

Wird eine Variable nicht initialisiert, so erhält sieden Wert undefined oder NaN in numerischemKontext.

Mittels var deklarierte Variablen sind permanent.Sie können nicht mit delete gelöscht werden.

Variablen können mehrfach deklariert und initiali-siert werden.

Sichtbarkeitsbereich

JavaScriptDirk Husung

Variablen (2)

Page 28: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

Eine globale Variable ist programmweit sichtbar, ei-ne lokale Variable innerhalb der Funktion, in der siedeklariert ist, auch vor ihrer Deklaration. Im Fal-le geschachtelter Funktionsdefinitionen besitzt je-de Funktion ihren eigenen Sichtbarkeitsbereich.

Eine lokale Variable verdeckt eine gleichnamige glo-bale.

var scope = "global";function checkscope() {document.write (scope); // undefinedvar scope = "local";document.write (scope); // "local"

}

Variablen sollten am Beginn einer Funktion dekla-raiert werden.

Namensauflösung

Jede globale Variable wird als Komponente einesglobalen Objekts angelegt. Im Client-seitigen Ja-vaScript dient das window-Objekt als globales Ob-jekt. Es besitzt eine sich selbst referenzierendewindow-Komponente.

JavaScriptDirk Husung

Variablen (3)

Page 29: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

Parameter und lokale Variablen einer Funktion wer-den als Komponenten eines Aufruf-Objekts ange-legt.

Bei Aufruf einer Funktion erzeugt der JavaScript-Interpreter einen neuen Ausführungskontext. Teildieses Kontextes ist das Aufruf-Objekt.

Es werden verschiedene globale Ausführungskon-texte unterstützt, jeder mit einem eigenen globalenObjekt. Zwischen diesen Kontexten ist ein Daten-austausch möglich (Sicherheitproblem!)

Jedem Ausführungskontext ist eine Sichtbarkeits-kette zugeordnet: Dazu sind die Aufruf-Objekte ent-sprechend der lexikalischen Struktur der zugehöri-gen Funktionsdefinitionen verkettet. JavaScriptsucht den Wert einer Variablen entlang dieser Ket-te.

Garbage Collection

JavaScript besitzt eine automatische Speicherfrei-gabe.

JavaScriptDirk Husung

Variablen (4)

Page 30: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

3.10 Operatoren

Operator-Priorität

Operatorart Operatoren

Komponetenzugriff . []

Instantiierung new

Unterprogrammaufruf ()

Negation/Inkrement ! ~ - + ++ -- typeof voiddelete

Multiplikation/Division * / %

Addition/Subtraktion + -

bitweiser Shift << >> >>>

Vergleich < <= > >=

Gleichheit == !=

bitweises Und &

bitweises Exklusiv-Oder ^

bitweises Oder |

logisches Und &&

logisches Oder ||

Bedingter Ausdruck ?:

Zuweisung = += -= *= /= %= <<= >>=>>>= &= ^= |=

Komma ,

JavaScriptDirk Husung

Operatoren (1)

Page 31: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

Anmerkungen:

• JavaScript konvertiert Operanden in die geeig-neten Typen für eine Operation, wenn möglich.

i = "3"*"5" // 15

• Der Zuweisungsoperator liefert den Wert desrechten Operanden.

Vergleichsoperatoren

Operator Beschreibung

== true bei gleichem Wert, ggf. nach Typkonvertie-rung

!= true bei ungleichem Wert, selbst nach Typkon-vertierung

=== true bei gleichem Typ und Wert!== true bei ungleichem Typ oder Wert> größer>= größer oder gleich< kleiner<= kleiner oder gleich

JavaScriptDirk Husung

Operatoren (2)

Page 32: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

Zwei Operanden werden wie folgt auf Gleichheitverglichen:

• Besitzen die Operanden denselben Typ, werdenihre Werte verglichen.

Besitzt einer der Operanden den Wert NaN, sinddie Operanden ungleich.

Referenzieren die Operanden verschiedene Ob-jekte, sind sie ungleich, selbst wenn beide Ob-jekte zu gleichen primitiven Datentypen konver-tiert werden könnten.

• Ist einer der Operanden null und der andereundefined, sind die Operanden gleich.

• Andernfalls wird versucht, die Operanden in glei-che Typen zu konvertieren:

Ist der eine Operand eine Zahl, der andere ei-ne Zeichenkette, wird die Zeichenkette in eineZahl konvertiert und der Vergleich erneut durch-geführt.

Besitzt einer der Operanden einen boolschenWert, wird false nach 0, true nach 1 kon-vertiert und der Vergleich erneut durchgeführt.

JavaScriptDirk Husung

Operatoren (3)

Page 33: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

Ist einer der Operanden ein Objekt und der an-dere eine Zahl oder Zeichenkette, wird versucht,das Objekt mittels valueof() oder toString()zu konvertieren; danach wird der Vergleich er-neut ausgeführt.

In allen anderen Fällen liefert der Vergleich un-gleich.

Anmerkungen:

• Wenn Navigator 3 bei einem Vergleich eine Zei-chenkette nicht in eine Zahl konvertieren kann,meldet er einen Fehler statt das Ergebnis falsezu liefern.

• Ist im <SCRIPT>-Tag die JavaScript-Version 1.2angegeben, führt Navigator 4 vor einem Ver-gleich auf Gleichheit keine Typ-Konvertierungdurch.

• Der strikte Vergleichsoperator „===“, implemen-tiert in IE 4, entspricht einem Vergleich aufGleichheit ohne vorherige Typkonvertierung derOperanden.

null und undefined werden nicht als gleichbertrachtet.

JavaScriptDirk Husung

Operatoren (4)

Page 34: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

• Die Operatoren „<“, „<=“, „>“, „>=“ erlauben Ope-randen beliebigen Typs, sind jedoch nur für Zah-len und Zeichenketten erklärt; die Operandenwerden ggf. konvertiert.

Arithmetische Operatoren

Im wesentlichen wie in C, aber:

• Bei „+“-Verknüpfung einer Zeichenketten mitZahl, wird die Zahl in eine Zeichenkette konver-tiert, und die Zeichenketten werden aneinander-gehängt.

s = "1" + 2 // "12"

• Die Division ganzer Zahlen erfolgt gleitpunktmä-ßig.

• Der Modulo-Operator ist auch für Gleitpunkt-Da-tentypen erklärt.

JavaScriptDirk Husung

Operatoren (5)

Page 35: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

Bitweise Operatoren

Operator Beschreibung

& bitweises Und| bitweises Oder^ bitweises Exklusiv-Oder~ bitweise Negation<< Shift um eine Bitposition nach links>> arithmetischer Shift um eine Bitposition nach

rechts unter Erhalt des Vorzeichens>>> logischer Shift um eine Bitposition nach rechts mit

Einführung einer führenden 0

Anmerkungen:

• Die bitweisen Operatoren liefern NaN, wenn ihreOperanden nicht ganzzahlig oder nicht als 32-Bit-Werte darstellbar sind.

Logische Operatoren

Anmerkungen:

• Kann der linke Operand von „&&“ zu false kon-vertiert werden, liefert „&&“ den Wert des linkenOperanden, sonst den des rechten.

JavaScriptDirk Husung

Operatoren (6)

Page 36: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

• Kann der linke Operand von „||“ zu true kon-vertiert werden, liefert „||“ den Wert des linkenOperanden, sonst den des rechten.

Spezielle Operatoren

Operator Beschreibung

new Instantiierung eines Objektsdelete Löschen eines Objekts, eines Objektattributs oder

eines Feldelementsthis Referenz auf das aktuelle Objekttypeof Typkennung (als Zeichenkette)void Ausdrucksauswertung ohne Ergebnisrückgabe

Anmerkungen:

• Objekte und Felder werden mit dem new-Operatorerzeugt:

new constructor

Der constructor muß die Form eines Funkti-onsaufrufs besitzen. Falls keine Argumente an-gegeben werden, können die Klammern entfal-len.

Der new-Operator erzeugt zunächst ein Objekt,das dann der constructor-Funktion als Wertvon this übergeben wird.

JavaScriptDirk Husung

Operatoren (7)

Page 37: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

• delete dient dem Löschen einer Objektkom-ponente. Bei einigen vordefinierten und einigenClient-seitigen Objektkomponenten bleibtdelete wirkungslos. Ein Aufruf von deletefür mittels var deklarierte Variablen führt zu ei-ner Fehlermeldung.

• Der typeof-Operator (seit Navigator 3 und IE 3)liefert eine Zeichenkette, die den Typ des Ope-randen beschreibt: "number", "string","boolean" für die entsprechenden primitivenDatentypen, "object" für Objekte, Felder undnull, "function" für Funktionen sowie"undefined" für nicht definierte oder uninitia-lisierte Komponenten.Um verschiedene Objekttypen zu unterscheiden,kann meist die constructor-Komponente her-angezogen werden:

if (typeof d == "object" &&d.constructor == Date) {

...}

• void liefert für beliebige Operanden das Ergeb-nis undefined. Dies kann nützlich sein inner-halb von HTML-Tags:

<A HREF="javascript:void window.open();">New Window</A>

JavaScriptDirk Husung

Operatoren (8)

Page 38: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

4 Kontrollstrukturen

4.1 Blockanweisung

s.u.

4.2 Verzweigungs-Anweisungen

if- und if-else-Anweisung

var array = new Array();

if (!array[0])initialize();

var input;

if(input === undefined) {doThis();

}else {doThat();

}

JavaScriptDirk Husung

Verzweigungs-Anweisungen (1)

Page 39: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

switch-Anweisung (ab JavaScript 1.2)

switch(Eingabe) {case "1":alert("Erster Zweig");break;

case "2":alert("Zweiter Zweig");break;

default:alert("Standard");break;

}

4.3 Wiederholungs-Anweisungen

while-Anweisung

var i = 1;

while(i <= 10) {var x = i * i;document.write("<br>" + i + "^2 = " + x);i++;

}

JavaScriptDirk Husung

Wiederholungs-Anweisungen (1)

Page 40: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

for-Anweisung

for(i = 1; i <= 10; i++) {var x = i * i;document.write("<br>" + i + "^2 ist " + x);

}

var Ergebnis = "";

for (var Eigenschaft in Objekt) {Ergebnis += ObjName + "." + Eigenschaft+ " = " + Objekt[Eigenschaft] + "<br>";

}

do-while-Anweisung

var i = 1;

do {var x = i * i;document.write("<br>" + i + "^2 ist " + x);

} while(i <= 10);

JavaScriptDirk Husung

Wiederholungs-Anweisungen (2)

Page 41: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

4.4 Spezielle Anweisungen

break- und continue-Anweisung

while (i < 6) {if (i == 3) {alert("Das war’s, i ist gleich " + i);break Ende;

}i++;

}Ende:

with-Anweisung

with(document) {open();write("Hintergrundfarbe: " + bgColor);close();

}

JavaScriptDirk Husung

Spezielle Anweisungen (1)

Page 42: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

5 Funktionen

5.1 Funktionsdefinition

function square(x) {return x*x;

}

Anmerkungen:

• Wird eine Funktion mit mehr Argumenten auf-gerufen als vereinbart, werden die überzähligenArgumente ignoriert.

• Wird eine Funktion mit weniger Argumenten auf-gerufen als vereinbart, erhalten die restlichenParamter den Wert undefined.

• Enthält eine Funktionsdefinition keine return-Anweisung, liefert sie den Wert undefined zu-rück.

Obige Funktionsdefinition erzeugt ein Funktionsob-jekt und weist es der Variablen square zu; ent-sprechend ist zulässig:

JavaScriptDirk Husung

Funktionsdefinition (1)

Page 43: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

var f = square;var y = f(2);

Funktionen können an Objektkomponenten zuge-wiesen werden; sie werden damit zu Methoden:

var o = new Object;o.square = function (x) { return x*x; };

5.2 Argument-Objekt

Parameter und lokale Variablen einer Funktion wer-den als Komponenten eines Aufruf-Objekts ange-legt.

Ein Aufruf-Objekt definiert außerdem eine Kompo-nente arguments, die auf ein arguments-Objektverweist. Dieses Objekt stellt ein Feld dar:

arguments.length liefert die Anzahl aktueller Ar-gumente, arguments[i] das i-te Argument.

Damit sind Funktionen für beliebige Argumentan-zahl implementierbar:

JavaScriptDirk Husung

Argument-Objekt (1)

Page 44: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

function max(){var m = Number.NEGATIVE_INFINITY;

for (var i = 0; i < arguments.length; i++)if (arguments[i] > m)m = arguments[i];

return m;}

arguments besitzt zusätzlich die Komponentencallee (seit JavaScript 1.2) und caller (seit Na-vigator 4 mit geänderter Bedeutung):

arguments.callee verweist auf die aktuell aus-geführte Funktion. Damit kann eine anonyme Funk-tion rekursiv aufgerufen werden.

arguments.caller verweist auf das Argument-Objekt der Funktion, die die aktuell ausgeführte auf-gerufen hat, die aufrufende Funktion selbst ergibtsich mit arguments.caller.callee.

5.3 Funktions-Objekt

Die length-Komponente eines Funktions-Objektsliefert die Zahl definierter Parameter. Seit Java-Script 1.2 wird die Verwendung von arity stattlength empfohlen (mit gleicher Bedeutung).

JavaScriptDirk Husung

Funktions-Objekt (1)

Page 45: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

Achtung: In Navigator 4 sind arity und length

nur korrekt implementiert für JavaScript 1.2.

Seit Navigator 4 definiert ein Funktionsobjekt dieMethoden apply() und call(). Sie erlauben diebetreffenden Funktion aufzurufen, als sei sie Me-thode eines anderen Objekts:

f.apply (o, [1,2]); oderf.call (o, 1, 2);

vergleichbar mit

o.m = f;o.m(1,2);delete o.m;

Benutzterdefinierte Komponenten eines Funktions-objekts entsprechen static-Variablen aus C; ihrWert besteht über einen Funktionsaufruf hinaus.

uniqueInteger.counter = 0;

function uniqueInteger() {return uniqueInteger.counter++;

}

JavaScriptDirk Husung

Funktions-Objekt (1)

Page 46: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

5.4 Prototyp-Objekt

Ein Funktionsobjekt besitzt eine prototype-Kom-ponente, die auf ein vordefiniertes Prototyp-Objektverweist.

JavaScriptDirk Husung

Prototyp-Objekt (2)

Page 47: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

6 Objekte

• Objekte können erzeugt werden mit dem new-Operator gefolgt von dem Aufruf einer Konstruk-tor-Funktion oder seit JavaScript 1.2 mit einerLiteralschreibweise.

• Auf Objekt-Komponenten wird mit dem „.“-Ope-rator zugegriffen.

• Der Versuch, den Wert einer nicht definiertenKomponente zu lesen, liefert undefined.

• Eine Objekt-Komponente wird durch einfacheWertzuweisung erzeugt (ohne var).

• Seit JavaScript 1.2 kann eine Objekt-Komponen-te mit delete gelöscht werden.

• Mit der for/in-Schleife können alle benutzer-definierten Komponenten eines Objekts durch-laufen werden; einige vordefinierte Komponen-ten bleiben unberücksichtigt.

function listPropertyNames (obj) {var names = "";for (var i in obj)

names += i + "\n";alert (names);

}

JavaScriptDirk Husung

Objekte (1)

Page 48: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

6.1 Konstruktor-Funktionen

Eine Konstruktor-Funktion dient der Initialisierungeines neu erzeugten Objekts.

Sie wird durch den new-Operator aufgerufen underhält einen Verweis auf ein neu erzeugtes, leeresObjekt als Wert der vordefinierten this-Variable.

Konstruktor-Funktionen liefern in aller Regel keinErgebnis. Gegebenenfalls ersetzt der Rückgabe-wert das zuvor angelegte Objekt als Ergebnis desnew-Operators.

6.2 Methoden

Eine Methode ist eine JavaScript-Funktion, derenAufruf an ein Objekt geknüpft ist. Über die vordefi-nierte this-Variable erhält die Methode Zugriff aufdieses Objekt.

Einer Methode wird auf diese Weise stets ein zu-sätzliches implizites Argument übergeben.

JavaScriptDirk Husung

Methoden (1)

Page 49: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

Allerdings gilt: Eine Funktion speichert ihren Wertin einer Variablen. Jede globale Variable wird alsKomponente eines globalen Objekts gespeichert.Eine Funktion ist damit zunächst Methode diesesglobalen Objekts, this verweist innerhalb der Funk-tion auf das globale Objekt.

Der Unterschied liegt in der Intention: Methodenwirken vorrangig auf das Objekt, an das ihr Aufrufgeknüpft ist, Funktionen sind eigenständig.

6.3 Prototyp-Objekt

Es ist ineffizient, mittels einer Konstruktor-Funktiondieselben Methoden in jedem einzelnen Objekt ein-zutragen; eine Lösung bietet seit JavaScript 1.1das Prototyp-Objekt.

Zu jeder Konstruktor-Funktion wird ein Prototyp-Objekt erzeugt und jedes mit einer Konstruktor-Funktion initialisierte Objekt erbt alle Komponen-ten dieses Prototyp-Objekts; die Komponenten des

JavaScriptDirk Husung

Prototyp-Objekt (1)

Page 50: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

Prototyp-Objekts erscheinen unmittelbar als Kom-ponenten des Objekts, auch wenn sie dem Proto-typ-Objekt nach Erzeugung des Objekts hinzuge-fügt werden.

Damit eignet sich das Prototyp-Objekt ideal zurSpeicherung von Konstanten und Methoden.

Wird lesend auf eine Objekt-Komponente zugegrif-fen, so wird die Komponente zunächst in dem Ob-jekt, dann in dessen Prototyp-Objekt gesucht.

Bei einer Wertzuweisung bleibt das Prototyp-Objektdagegen unberücksichtigt, es wird eine Komponen-te in dem betreffenden Objekt angelegt, die einegleichnamige Komponente des Prototyp-Objekts ver-deckt.

In Navigator 4 wird zu jeder Funktion ein Prototyp-Objekt erzeugt, für den Fall, daß die Funktion alsKonstruktor-Funktion dient. Navigator 3 erzeugt einPrototyp-Objekt erst bei der tatsächlichen Verwen-dung einer Funktion als Konstruktor-Funktion.

JavaScriptDirk Husung

Prototyp-Objekt (1)

Page 51: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

6.4 Vererbung

Ein Prototyp-Objekt ist selbst ein Objekt, erzeugtmittels new Object(), besitzt damit seinerseitsein Prototyp-Objekt. Es ist möglich, eine Klasse zurabgeleiteten Klasse einer Basisklasse zu erklären,indem man die prototype-Komponente der ab-geleiteten Klasse setzt:

Car.prototype = new Vehicle();

Damit verliert man jedoch die von JavaScript ge-nerierte constructor-Komponente des Prototyp-Objekts für Car, die auf die Konstruktor-Funktionfür Car verweist.

Die constructor-Komponente ist häufig hilfreichzur Identifizierung eines Objekttyps.

Navigator 4 bietet die Möglichkeit, präziser zu er-klären:

Car.prototype.__proto__ =new Vehicle.prototype;

JavaScriptDirk Husung

Vererbung (1)

Page 52: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

6.5 Vergleich C++,Java – JavaScript

C++, Java JavaScript

klassenbasierte Vererbung prototypbasierte VererbungKlasse Konstruktor-Funktion, PrototypInstanzvariablen gesetzt in Konstruktor-FunktionInstanzmethode Komponente des Prototyp-Ob-

jektsKlassenvariable Komponente des Konstruktor-

FunktionsobjektsKlassenmethode Komponente des Konstruktor-

Funktionsobjekts

6.6 Einige Methoden

Jedes Objekt erbt die für Object definierten Kom-ponenten.

toString(), angewandt auf ein Objekt o, lieferteinige interne Information über o, unter Navigator 4für JavaScript 1.2 eine Literal-Darstellung des Ob-jekts. Ab JavaScript 1.3 sollte toSource() statt-dessen benutzt werden.

Wurde die originale toString()-Methode über-definiert, kann sie mittels

JavaScriptDirk Husung

Einige Methoden (2)

Page 53: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

Object.prototype.toString.apply(o);

aufgerufen werden.

valueOf(), angewandt auf ein Objekt o, liefertdas Objekt selbst.

Unter Navigator 4 für JavaScript 1.2 können watch()und unwatch() zu Debug-Zwecken genutzt wer-den: Im Fall einer Wertzuweisung an eine Objekt-komponente wird durch den JavaScript-Interpretereine benutzerdefinierte Funktion aufgerufen:

function readOnlyHandler (property, oldValue, newValue) {

if (newValue != oldValue)alert (property + "is read only");

}

for (i in o) o.watch (i, readOnlyHandler);

JavaScriptDirk Husung

Einige Methoden (3)

Page 54: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

7 Felder

7.1 Array-Definition

Felder können auf unterschiedliche Weise erkärtwerden:

var a = new Array();var a = new Array(1.2, "JavaScript");var a = new Array(10);

Achtung: Navigator 4 legt im dritten Fall für Java-Script 1.2 statt eines 10-elementigen Feldes ein 1-elementiges mit dem Wert 10 an.

Die Anzahl der Elemente eines Feldes kann jeder-zeit geändert werden durch Zuweisung von Feld-elementen oder Setzen der length-Komponente.

Feldelemente können beliebigen Objekten hinzu-gefügt werden, allgemeinen Objekten fehlen jedochfür Felder typische Komponenten (etwa length).

JavaScriptDirk Husung

Array-Definition (1)

Page 55: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

7.2 Array-Methoden

join() konvertiert alle Elemente eines Felder zuZeichenketten und hängt sie aneinander, standard-mäßig getrennt durch Kommata.

var a = [1, 2, 3];s = a.join(); // s == "1,2,3"s = a.join(", "); // s == "1, 2, 3"

reverse() kehrt die Reihenfolge der Elemente ei-nes Feldes um („in Place“).

var a = [1, 2, 3];a.reverse(); // [3, 2, 1]

sort() sortiert die Elemente eines Feldes („inPlace“), standardmäßig in alphabetischer Reihen-folge.

var a = [33, 4, 1111, 222];a.sort(); // [1111, 222, 33, 4]a.sort(function(a,b) {return a-b;}); // [4, 33, 222, 1111]

concat() (seit JavaScript 1.2) fügt die angegbe-nen Argumente an ein Feld an; Felder werden da-bei durch ihre Elemente ersetzt (nicht rekursiv).

JavaScriptDirk Husung

Array-Methoden (2)

Page 56: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

var a = [1, 2, 3];a.concat(4,[5,[6,7]]);

// [1,2,3,4,5,[6,7]]

slice() (seit JavaScript 1.2) liefert einen Teilbe-reich eines Feldes. Das erste Argument gibt denIndex des ersten Elements, das zweite Argumentverringert um 1 den Index des letzten Elements an.Ein negatives Argument i wird als length-|i|

behandelt. Fehlt das zweite Argument, wird lengthverwandt.

var a = [1, 2, 3, 4, 5];a.slice(1,3); // [2, 3];

toString() liefert grundsätzlich dasselbe wiejoin(), unter Navigator 4 für JavaScript 1.2 je-doch eine Literaldarstellung. Ab JavaScript 1.3 soll-te toSource() statt toString() benutzt wer-den.

JavaScriptDirk Husung

Array-Methoden (3)

Page 57: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

8 Reguläre Ausdrücke

8.1 Muster

Muster bestehen aus Zeichenfolgen, eingeschlos-sen zwischen zwei „/“.

In einem Muster steht ein einzelnes Zeichen fürsich selbst, mit Ausnahme folgender Sonderzeichen

Zeichen steht für

\f Seitenvorschub (form feed)\n Zeilenende (new line)\r Zeilenrücklauf (carriage return)\t horizontaler Tabulator\v vertikaler Tabulator\c c selbst für c aus / \ . * + ? | ( ) [ ] { }

\ddd ASCII-Zeichen in oktaler Notation\xdd ASCII-Zeichen in hexadezimaler Notation\cX Kontrollzeichen ^X

JavaScriptDirk Husung

Muster (1)

Page 58: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

Es lassen sich Zeichenklassen bilden:

Zeichen steht für

[. . .] jedes Zeichen zwischen den Klammern[^. . .] jedes Zeichen nicht zwischen den Klammern. [^\n ]

\w [a-zA-Z0-9]

\W [^a-zA-Z0-9]

\s [ \t\n\r\f\v]

\S [^ \t\n\r\f\v]

\d [0-9]

\D [^0-9]

[\b] Rückschritt (backspace), Sonderfall

Für vorangehende Teile von Mustern kann die Min-dest- und Höchstzahl ihrer Wiederholung angege-ben werden:

Zeichen Bedeutung

{n,m} mindestens n, höchstens m mal{n,} mindestens n mal{n} genau n mal? {0,1}

+ {1,}

* {0,}

JavaScriptDirk Husung

Muster (2)

Page 59: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

Es können Alternativen angegeben und Teile vonMustern gruppiert werden; auf Gruppen kann Be-zug genommen werden.

Zeichen Bedeutung

| entweder vorangehender oder nachfolgender Teil-ausdruck

(. . .) Gruppierung\n n-te Gruppe. Gruppennummern werden durch Ab-

zählen ihrer öffnenden Klammern vergeben

Für das Auftreten von Mustern können bestimmtePositionen vorgeschrieben werden:

Zeichen Bedeutung

^ Anfang einer Zeichenkette/Zeile$ Ende einer Zeichenkette/Zeile\b Wortgrenze\B keine Wortgrenze

Schließlich können einem Muster Attribute ange-hängt werden:

Zeichen Bedeutung

i Mustervergleich ohne Beachtung von Groß-/Kleinschreibung

g Behandlung aller passenden Teilzeichenketten

JavaScriptDirk Husung

Muster (3)

Page 60: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

8.2 String-Methoden

search() liefert den Index des ersten Zeichenseiner Zeichenkette, ab der ein gegebenes Musterpaßt, oder -1.

"JavaScript".search (/script/i);

replace() ersetzt in einer Zeichenkette den Text,auf den ein gegbenes Muster paßt, durch einen ge-gebenen Ersetzungstext.

text.replace (/javascript/ig, "JavaScript");

match() liefert zu einem gegebenen Muster beinicht gesetztem g-Attribut ein Feld, dessen ersteKomponente den gesamten passenden Teil der Zei-chenkette enthält und dessen folgende Komponen-ten die zu den Gruppen des Musters passendenTeile enthalten.

Bei gesetztem g-Attribut liefert match() ein Feldmit den Teilen einer Zeichenkette, die auf das ge-gebene Muster passen.

JavaScriptDirk Husung

String-Methoden (1)

Page 61: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

"1 plus 2 plus 3".match(/\d+/g)// ["1", "2", "3"]

split() verwendet das gegebene Muster zur Tren-nung einer Zeichenkette und liefert ein Feld der re-sultierenden Teilzeichenketten.

"1,2, 3".split(/\s*,\s*/) // ["1", "2", "3"]

8.3 RegExp-Methoden

test() prüft, ob das Muster eines RegExp-Objek-tes auf eine gegebene Zeichenkette paßt.

var pattern = /java/i;pattern.test("JavaScript");

exec() ähnlich der String-Methode match().

var pattern = /java/ig;var text = "JavaScript oder Java?";var result;

while ((result = pattern.exec(text)) != null)alert ("gefunden: " + result[0]

+ " an Position " + result.index);

JavaScriptDirk Husung

RegExp-Methoden (1)

Page 62: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

Wird das g-Attribut angegeben, setzt exec() dielastIndex-Komponente des RegExp-Objekts aufdas erste Zeichen hinter der Teilzeichenkette, aufdie das Muster paßt.

Ein erneuter Aufruf von exec() beginnt seine Su-che ab der lastIndex-Position.

Wird keine passende Teilzeichenkette gefunden, sowird lastIndex auf 0 zurückgesetzt.

JavaScriptDirk Husung

RegExp-Methoden (2)

Page 63: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

9 Windows und Frames

Das window-Objekt stellt das globale Objekt inClient-seitigem JavaScript dar; es speichert alle glo-balen Variablen.

Daneben besitzt es eine Reihe vordefinierter Kom-ponenten, die die Kontrolle des Browser-Fensterserlauben:

Daten-Komponenten

Komponente Beschreibung

closed true, wenn das Fenster geschlossen ist.defaultstatus, status

Inhalt der Statuszeile.document Verweis auf das document-Objekt.frames[] Feld der Frames innerhalb des Fensters.history Verweis auf das history-Objekt.innerHeight, innerWidth, outerHeight,outerWidth

innere und äußere Fenstermaße (nicht beiIE 4).

JavaScriptDirk Husung

Windows und Frames (1)

Page 64: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

Komponente Beschreibung

location Verweis auf das location-Objekt, das dieURL des angezeigten Dokuments repräsen-tiert. Durch Wertzuweisung kann eine andereSeite geladen werden.

locationbar, menubar, personalbar,scollbars, statusbar, toolbar

legt die Sichtbarkeit der entsprechenden Teileeines Navigator-Fensters fest (nicht bei IE 4).

name Name des Fensters.opener Verweis auf das öffnende Fenster.pageXOffset, pageYOffset

Ausmaß, um das der Fensterinhalt gescrollt ist(nicht bei IE 4).

parent Verweis auf das umschließende Fenster einesFrame.

self Verweis auf das window-Objekt selbst.top Verweis auf das oberste Fenster einer Frame-

Hierarchiewindow Verweis auf das window-Objekt selbst.

Methoden

Methode Beschreibung

alert(), confirm(), prompt()einfache vordefinierte Popup-Dialogboxen.

close() schließt ein Fenster.

JavaScriptDirk Husung

Windows und Frames (2)

Page 65: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

Methode Beschreibung

find(), home(), print(), stop()Funktionalität der entsprechenden Navigator-Buttons (nicht bei IE 4).

focus(), blur()fordert den Tastatur-Focus für ein Fenster bzw. gibtihn frei (nicht bei IE 3).

moveBy(), moveTo()verschiebt ein Fenster.

resizeBy, resizeTo()ändert die Fenstergröße.

scrollBy, scrollTo()scrollt den Fensterinhalt.

setInterval(), clearInterva()bewirkt, daß eine Funktion in gegebenen Zeitab-ständen aufgerufen wird bzw. dies nicht länger er-folgt.

setTimeOut(), clearTimeOut()bewirkt, daß eine Funktion nach einer gegebenenZeit aufgerufen wird bzw. dies nicht mehr erfolgt.

JavaScriptDirk Husung

Windows und Frames (3)

Page 66: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

9.1 Einfache Dialoge

var msg = "Grafiken in hoher Auflösung?"

if (confirm (msg))location.replace ("hires.htm");

elselocation.replace ("lowres.htm");

n = prompt ("Wie heißen Sie?");document.write ("<h1>Willkommen, " + n + "</h1>");

9.2 Statuszeile

<a href="sitemap.htm"onMouseOver="status=’Go to Site Map’; return true;"

onMouseOut="status=’’;">Site Map</a>

Der onMouseOver-Handler muß true liefern, umdie Standardaktion des Browsers zu unterdrücken,die URL in der Statuszeile anzuzeigen.

Der Standardtext der Statuszeile kann durch Zu-weisung an defaultStatus gesetzt werden.

JavaScriptDirk Husung

Statuszeile (1)

Page 67: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

9.3 Periodische Aktionen

Beispiel: Uhr in der Statuszeile

<HTML><HEAD><SCRIPT>function displayTime(){var d = new Date();var h = d.getHours();var m = d.getMinutes();if (m < 10) m = "0" + m;var t = h + ’:’ + m;

defaultStatus = t;

setTimeout("displayTime()", 60000);// 60000 ms = 1 Minute.

}</SCRIPT></HEAD><BODY onLoad="displayTime();"><!-- HTML Dokument --></BODY></HTML>

JavaScriptDirk Husung

Periodische Aktionen (2)

Page 68: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

9.4 navigator-Objekt

Die window.navigator-Komponente verweist aufein navigator-Objekt, das Informationen über denverwendeten Browser liefert:

Komponente Beschreibung

appName Name des Browsers.appVersion Versionsnummer des Browsers.userAgent typischerweise Informationen aus appName

und appVersion.appCodeName Codename des Browsers, z.B. „Mozilla“.platform Rechnerplattform (neu in JavaScript 1.2).language Sprachversion des Browsers; z.B.

„en“ für Englisch (neu in Navigator 4,userLanguage, systemLanguage inIE 4).

Anzeige aller Browser-Informationen:

var browser = "Browser-Informationen\n";for (var item in navigator)browser +=item + ": " + navigator[item] + "\n";

alert (browser);

JavaScriptDirk Husung

navigator-Objekt (1)

Page 69: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

9.5 Fenster-Kontrolle

Öffnen und Schließen eines Fensters:

var win = window.open (’javascript:"<h1>Hello</h1>"’, "hello","width=400,height=350,status,resizeable");

var id = window.setInterval("bounce()", 100);

function bounce() {if (win.closed()) {clearInterval (id);return;

}

//...win.moveTo (x,y);

}

win.close();

JavaScriptDirk Husung

Fenster-Kontrolle (1)

Page 70: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

10 Dokument-Objekt-Modell

Das document-Objekt stellt eine Reihe nützlicherKomponenten bereit:

Komponente Beschreibung

alinkColor Farbe eines aktivierten Links (während desAnklickens).

anchors[] Feld von Anker-Objekten.applets[] Feld von Applet-Objekten.bgColor Hintergrundfarbe des Dokuments.cookie erlaubt JavaScript-Programmen Cookies

zu lesen und zu schreiben.domain erlaubt verschiedenen Web-Servern der-

selben Internet-Domäne, Sicherheitsbe-schränkungen wechselseitig zu lockern.

embeds[] Feld eingebetteter Objekte.fgColor Textfarbe des Dokuments.forms[] Feld von Formular-Elementen.images[] Feld von Grafiken.lastModified Zeichenkette mit dem letzten Änderungs-

datum.linkColor Farbe nicht besuchter Links.links[] Feld von Link-Objekten.location statt location sollte URL verwandt wer-

den.

JavaScriptDirk Husung

Dokument-Objekt-Modell (1)

Page 71: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

Komponente Beschreibung

referrer URL des Dokuments, von dem aus das aktu-elle Dokument aufgerufen wurde.

title Text zwischen <title> und </title>.URL Zeichenkette mit der URL, von der das

aktuelle Dokument geladen wurde; vgl.location.href.

vlinkColor Farbe besuchter Links.

Auf einfache Weise läßt sich erreichen, daß voreiner untergeordneten HTML-Seite zuerst die aufoberster Ebene angezeigt wird:

if (document.referrer == ""|| document.referrer.indexOf ("mysite.com") == -1)

window.location = "http://home.mysite.com";

Folgende Zeilen implementieren einen Zufalls-Link:

<a href="about:"onMouseOver="status=’click me!’; return true;"

onMouseOut="status=’’"onClick="this.href=document.links[Math.floor(Math.random()*document.links.length)]">

Zufalls-Link</a>

JavaScriptDirk Husung

Dokument-Objekt-Modell (2)

Page 72: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

Die folgende Funktion listet die Links eines Doku-ments:

function listlinks(d) {var win = window.open("", "linklist","menubar,scrollbars,resizable,"+"width=600,height=300");

for (var i = 0; i < d.links.length; i++) {win.document.write(’<A HREF="’ + d.links[i].href + ’">’)

win.document.write(d.links[i].href);win.document.write("</A><BR>\n");

}win.document.close();

}

JavaScriptDirk Husung

Dokument-Objekt-Modell (3)

Page 73: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

Das folgende Beispiel erstellt ein Verzeichnis allerAnkerpunkte eines Dokuments:

listanchors.nav = true;if (navigator.appName.indexOf(

"Microsoft") != -1)listanchors.nav = false;

function listanchors(d) {var win = window.open("", "navwin","menubar,scrollbars,resizable," +"width=600,height=300");

win.document.writeln("<H1>Navigation Window:<BR>" +document.title + "</H1>");

for(var i = 0; i < d.anchors.length; i++) {var text;var a = d.anchors[i];if (listanchors.nav)text = a.text; // Navigator 4

elsetext = a.innerText; // IE 4

if ((text == null) || (text == ’’))text = a.name;

win.document.write(’<A HREF="#’ + a.name + ’"’ +’ onClick="opener.location.hash=\’’ +a.name + ’\’; return false;">’);

win.document.write(text);win.document.write(’</A><BR>\n’);

}win.document.close();

}

JavaScriptDirk Husung

Dokument-Objekt-Modell (4)

Page 74: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

11 Formular-Elemente

HTML-Tag Beschreibung; Ereignis

<input type=button> Druckknopf; onClick<input type=checkbox> Option; onClick<input type=file> Eingabefeld; onChange<input type=hidden> Daten, die zusammen mit ei-

nem Formular verschickt wer-den, unsichtbar für den Benut-zer; kein Ereignis

<option> Eintrag innerhalb eines select-Elements; kein Ereignis

<input type=password> Paßwort-Eingabe; onChange<input type=radio> Alternative; onClick<input type=reset> Druckknopf zum Zurücksetzen

eines Formulars; onClick<select> Liste oder Drop-Down-Menü

zur Auswahl eines Eintrags;onChange

<select multiple> Liste zur Auswahl eines odermehrerer Einträge; onChange

<input type=submit> Druckknopf zum Absenden ei-nes Formulars; onClick

<input type=text> einzeiliges Textfeld; onChange<textarea> mehrzeiliges Textfeld;

onChange

JavaScriptDirk Husung

Formular-Elemente (1)

Page 75: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

11.1 Formularüberprüfung

function verify(f){var msg;var emptyFields = "";var errors = "";

for(var i = 0; i < f.length; i++) {var e = f.elements[i];if ((e.type == "text"

|| e.type == "textarea")&& !e.optional) {

if (e.value == null || e.value == ""|| isblank (e.value)) {

emptyFields += "\n " + e.name;continue;

}

if (e.numeric|| e.min != null || e.max != null) {

var v = parseFloat(e.value);if (isNaN(v)

|| e.min != null && v < e.min|| e.max != null && v > e.max) {errors += "- The field " + e.name+ " must be a number";

if (e.min != null)errors +=" that is greater than " + e.min;

if (e.max != null && e.min != null)errors += " and less than " + e.max;

else if (e.max != null)errors +=" that is less than " + e.max;

errors += ".\n";}

JavaScriptDirk Husung

Formularüberprüfung (1)

Page 76: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

}}

}if (!empty_fields && !errors) return true;// ...

}

<form onSubmit="this.firstname.optional = true;this.phonenumber.optional = true;this.zip.min = 0;this.zip.max = 99999;return verify(this);

">

First name:<input type=text name="firstname">Last name:<input type=text name="lastname"><br>Address:<br><textarea name="address" rows=4 colS=40></textarea><br>Zip Code:<input type=text name="zip"><br>Phone Number:<input type=text name="phonenumber"><br><input type=submit></form>

JavaScriptDirk Husung

Formularüberprüfung (2)

Page 77: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

12 Ereignisbehandlung

Ereignis Eintreten

onAbort bei AbbruchonBlur beim Verlassen eines ElementsonChange bei erfolgter ÄnderungonClick beim Anklicken; Rückgabe von false, um

Standardaktion zu unterdrückenonDblClick bei doppeltem AnklickenonError im FehlerfallonFocus beim Aktivieren eines ElementsonKeyDown bei gedrückter Taste; Rückgabe von false

zum AbbruchonKeyPress bei erfolgtem Tastendruck; Rückgabe von

false zum AbbruchonKeyUp bei losgelassener TasteonLoad nach volständigem Laden einer DateionMouseDown bei gedrückter Maustaste; Rückgabe von

false zum AbbruchonMouseMove bei weiterbewegter MausonMouseOut beim Verlassen des Elements mit der MausonMouseOver beim Überfahren des Elements mit der

Maus; Rückgabe von true, um die Anzeigeeiner URL in der Statuszeile zu verhindern

onMouseUp bei losgelassener Maustaste; Rückgabe vonfalse zum Abbruch

JavaScriptDirk Husung

Ereignisbehandlung (1)

Page 78: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

Ereignis Eintreten

onReset beim Zurücksetzen des Formulars; Rückga-be von false zum Abbruch

onRsize beim Ändern der FenstergrößeonSelect beim Selektieren von TextonSubmit beim Absenden des Formulars; Rückgabe

von false zum AbbruchonUnload beim Verlassen der Dateijavascript: bei Verweisen

12.1 Eventhandler als JavaScript-Komponenten

Statt Eventhandler in HTML-Tags einzutragen

<input type="button" name="b1"value="Press Me"onClick="alert(’Thanks!’);">

können sie in JavaScript-Code gesetzt werden:

<input type="button" name="b1"value="Press Me">

<script>document.b1.onclick =function () { alert(’Thanks!’); }

</script>

JavaScriptDirk Husung

Eventhandler als JavaScript-Komponenten (2)

Page 79: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

Vorsicht: In diesem Fall sind gegenüber obenButton, Form und Document nicht Bestandteil derSichtbarkeitskette des Eventhandlers.

In JavaScript sind Eventhandler-Komponenten voll-ständig klein zu schreiben.

JavaScriptDirk Husung

Eventhandler als JavaScript-Komponenten (3)

Page 80: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

13 Cookies

13.1 Cookie-Beschränkungen

Cookies sind gedacht für die gelegentliche Spei-cherung kleiner Datenmengen.

• Ein Web-Browser braucht nicht mehr als insge-samt 300 Cookies zu speichern,

• er braucht nicht mehr als 20 Cookies je Web-Server (nicht je Seite) zu speichern.

• er braucht nicht mehr als 4 KBytes je Cookie zuspeichern (für Schlüssel und Wert zusammen).

Ein Cookie-Wert darf kein Semikolon, Komma oderZwischenraumzeichen enthalten. Deshalb emp-fiehlt sich die Verwendung der JavaScript-Funktio-nen escape() und unescape() zur Ver- und Ent-schlüsselung eines Cookie-Wertes.

JavaScriptDirk Husung

Cookie-Beschränkungen (1)

Page 81: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

13.2 Speichern eines Cookies

var nextYear = new Date();nextYear.setFullYear (nextYear.getFullYear ()+1);document.cookie = "version="+ escape(document.lastModified)+ ";expires=" + nextYear.toGMTString();

Neben dem Wert eine Cookies können folgendeAttribute gesetzt werden:

expires=Datumstandardmäßig bleiben Cookies nur bis zum Ende einerWeb-Browser-Sitzung erhalten.

path=Pfadstandardmäßig ist ein Cookie nur Web-Seiten in demsel-ben Verzeichnis und dessen Unterverzeichnissen zugäng-lich. Durch Angabe eines verkürzten Pfades kann einCookie auch übergeordneten Verzeichnissen und derenUnterverzeichnissen zugänglich gemacht werden

domain=Domänestandardmäßig ist ein Cookie nur für Web-Seiten dessel-ben Servers zugänglich. Durch Angabe einer übergeord-neten Domäne kann ein Cookie auch für Web-Seiten an-derer Server zugänglich gemacht werden.

secureDie Übertragung eines Cookies erfolgt nur über ein ver-gleichsweise sicheres Protokoll, z.B. HTTPS.

JavaScriptDirk Husung

Speichern eines Cookies (2)

Page 82: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

Ein Cookie kann gelöscht werden, indem er mitdemselben Schlüssel, einem beliebigen Wert undeinem bereits verstrichenen Verfallsdatum erneutgeschrieben wird.

13.3 Lesen eines Cookies

Beispiel:

var allcookies = document.cookie;var key = "version="var pos = allcookies.indexOf (key);

if (pos != -1) {var start = pos + key.length;var end = allcookies.indexOf (";", start);if (end == -1)end = allcookies.length;

var value = allcookies.substring (start, end);

value = unescape (value);if (value != document.lastModified)alert ("Neue Version!");

}

JavaScriptDirk Husung

Lesen eines Cookies (1)

Page 83: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

15 Beispiele

15.1 Ereignisse

<html><head><title>Events</title><script language="JavaScript"><!--if ( navigator.appName == ’Netscape’ &&

parseFloat(navigator.appVersion) >= 3|| parseFloat(navigator.appVersion) >= 4)version = "ro";

elseversion = "noro";

if (version == "ro") {Picture = new Array(2);for(i = 0; i < 2; i++) {Picture[i] = new Image();Picture[i].src = "welcome"+i+".gif";

}}

function picChange (name,number) {if (version == "ro")name.src = Picture[number].src;

}//--></script></head><body><a href="event.htm"onMouseOut="picChange(welcome,0)"onMouseOver="picChange(welcome,1)"><img name="welcome" src="welcome1.gif"border=0 width="201" height="210"></a>

</body></html>

JavaScriptDirk Husung

Ereignisse (1)

Page 84: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

15.2 Cookies

<html><head><title>Cookies</title><script language="JavaScript"><!--function readValue () {var value = "";if (document.cookie) {var valueStart =

document.cookie.indexOf ("=") + 1;var valueEnd =

document.cookie.indexOf (";");if (valueEnd == -1)valueEnd = document.cookie.length;

value = document.cookie.substring (valueStart, valueEnd);

}return Wert;

}

function writeValue (ident, value, lifetime) {var now = new Date();var timeout = new Date (

now.getTime() + lifetime);document.cookie = ident + "=" + Wert

+ "; expires=" + timeout.toGMTString()+ ";";

}

JavaScriptDirk Husung

Cookies (2)

Page 85: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

function access() {var lifetime = 1000*60*60*24*365;var count = readValue();var counter = 0;if (count != "")counter = parseInt (count);

if (document.cookie)counter = counter + 1;

elsecounter = 1;

writeValue ("Counter", counter, lifetime);alert ("Dies ist Ihr " + counter

+ ". Besuch auf dieser Seite!");}//--></script></head><body onLoad="access()">Inhalt der Datei</body></html>

JavaScriptDirk Husung

Cookies (3)

Page 86: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

15.3 Formulare

<html><head><title>Seitentitel</title><script language="JavaScript"><!--function checkForm() {if (document.Formular.User.value == "") {alert("Bitte Ihren Namen eingeben!");document.Formular.Name.focus();return false;

}if (document.Formular.Mail.value == "") {alert("Bitte Ihre eMail-Adresse eingeben!");document.Formular.Mail.focus();return false;

}if (document.Formular.Alter.value == "") {alert("Bitte Ihr Alter eingeben!");document.Formular.Alter.focus();return false;

}

if (document.Formular.Mail.value.indexOf(’@’)== -1) {

alert("Keine E-Mail-Adresse!");document.Formular.Mail.focus();return false;

}

JavaScriptDirk Husung

Formulare (1)

Page 87: JavaScript - files.ifi.uzh.ch... •Im einfachsten Fall lassen sich vordefinierte Popup-Dialogboxen anzeigen, etwa bevor ein Benutzer ein wichtiges Formular versendet. • Im allgemeinen

with (document.Formular.Alter) {var ok = true;for(i=0; i < value.length; ++i)if ( value.charAt(i) < "0"

|| value.charAt(i) > "9")ok = false;

if(!ok) {alert("Altersangabe keine Zahl!");focus();return false;}

}}//--></script></head><body><form name="Formular"action="mailto:[email protected]"method=postonSubmit="return checkForm()">

<pre>Name: <input type=text size=40 name="User">E-Mail: <input type=text size=40 name="Mail">Alter: <input type=text size=40 name="Alter">Formular: <input type=submit value="Absenden">..<input type=reset value="Loeschen"></pre></form></body></html>

JavaScriptDirk Husung

Formulare (2)