Lieber mikethet,
Okay, also wenn ich das jetzt richtig verstanden habe, Überwacht Javascript ein Objekt(dem ein Event zugeordnet ist) auf das Eintreten des Events um dann ein Ereignis auszuführen. Wie das Einlesen bzw. parsen des Codes funktioniert verstehe ich jetzt auch. Nur bin ich mir beim Onload Event im Body immer noch unsicher.
mit anderen Worten, Du hast da so ein Bauchgefühl anstelle von solidem Grundlagenwissen. Naja, so fängt jeder einmal an. Daher solltest Du allen Ernstes die Links von ChrisB durchkauen. Du musst nicht auf Anhieb alles verstehen und verinnerlichen, aber vielleicht kannst Du aus den Quellen zumindest etwas mehr an Verständnis für Deine aktuelle Problemstellung erlernen.
Er lädt die Seite vollständig in das DOM und erst dann wird das onload event ausgeführt, wodurch er in die init-Funktion springt. jetzt ist bereits alles eingelesen, Jede Funktion von Javascript sowie der HTML-Code selber.
Der HTML-Code spielt nach dem Erstellen eines DOM keine Rolle mehr. "Das DOM" ist ein gigantisches Objekt, welches anhand des HTML-Codes erstellt wurde, und welches nun "die Seite" repräsentiert - in Form eben eines Objektes. Aus Sicht von JS kannst Du nun an diversen Unterobjekten herumschrauben, um das Dokument nach Deinen Bedürfnisen hin zu modifizieren. Damit wird die Seite "interaktiv".
nur verändert Javascript das DOM, dabei wird doch aber nicht der komplette Body-Inhalt neu geladen oder?
Vergiss den Quelltext! Wenn der Browser die Seite als Objekt generiert hat, dann schaut er nie wieder in den HTML-Code. Wozu auch? Das Dokument (das D in DOM steht für "document") ist doch da, wozu braucht es da noch eine Bauanleitung dafür?
Somit dürfte das Ereignis onload nicht mehr auftreten.(Ich weiß es ist nicht so, verstehe es aber nicht). Also dürfte er eigentlich auch nicht mehr wissen, welche Taste ich gedrückt habe, weild as Event ja gar nicht auslöst.
Du wirfst noch verschiedenerlei Dinge durcheinander. Ereignisse sind einfach Ereignisse, die geschehen. Manche Beobachter reagieren auf bestimmte Ereignisse. In JS bedeutet das, dass gewisse "event listeners" auf gewisse "events" hin damit reagieren, dass sie eventuell dafür registrierte Funktionen (oder von mir aus Funktionsobjekte) aufrufen (also ausführen lassen).
Genau deshalb habe ich Dir ja die Frage gestellt:
bitte erkläre mir mal die Bedeutung der folgenden beiden Zeilen:
document.onkeydown = keylistener;
[...]
keydata = keylistener;
Du hast zwei Objekte:
1. document
2. keydata
Das erste Objekt ist ein von der JS-Engine bereits vorgegebenes Objekt, nämlich window.document, das zweite eine von Dir definierte (lokale oder globale?) Variable.
Beim ersteren nutzt Du eine spezielle Eigenschaft namens "onkeydown", um ihr ein Funktionsobjekt zu geben. Das ist so, als ob Du einer Variablen einen Wert zuweist. "window.document.onkeydown" als "Variable" hat nun den Wert "Funktionsobjekt", sodass Du mit "window.document.onkeydown(e)" nun diese Funktion aufrufen kannst. Dass event listeners ein Eventobjekt benötigen, damit sie die für dieses Event gültigen Werte verarbeiten können, hättest Du in den von ChrisB verlinkten Quellen bei molily nachlesen können. Ich schlage vor, Du tust das noch!
Das Besondere an "window.document.onkeydown" ist, dass diese Eigenschaft von der JS-Engine als event listener voreingestellt ist. Ein dort hineingespeichertes Funktionsobjekt wird beim Eintreten des Tastendruck-Ereignisses ausgeführt. Bei molily findest Du fortgeschrittene Techniken, wie man das heute besser machen kann, denn Du ahnst sicher schon, dass es in dem Moment, wo mehrere Funktionen bei diesem Event ausgeführt werden sollen, zu einem ... sagen wir mal "Engpass"... kommt.
Warum Du der Variablen "keydata" ebenso das Funktionsobjekt (und nicht etwa den Rückgabewert der aufgerufenen Funktion) gibst, erschließt sich mir nicht. Daher mutmaße ich, dass Du den Unterschied zwischen diesen beiden Zeilen noch nicht verstanden oder noch nicht genügend verinnerlicht hast:
var f = function (e) { alert("e.type: " + e.type); };
var r = f(e);
Also brauchst Du auch in diesem Bereich noch wesentliches Grundlagenwissen. Bei molily solltest Du fündig werden.
@Felix:
Keydata ist ein Text-Objekt welcher den TastenCode ausgibt.
Nö. ;-)
Und Keylistener stellt den TastenCode fest, von der Taste die ich natürlich grade drücke.
Ja, das ist schon richtig. Aber das, was Du mit dem Tastencode machst, ist für Deine Problemstellung nicht sinnvoll. Warum das so ist, sollst Du selbst herausfinden, ohne dass ich Dir das erklären muss.
Habe der Funktion einen Rückgabewert gegeben, aber es klappt einfach nicht. ;(
Was soll denn "klappen"? Wie sollte das aus Sicht Deines Programms aussehen, wenn "es klappt"?
Liebe Grüße,
Felix Riesterer.
ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)