"Schreibmaschinenfunktion"
Volker Nebelung
- javascript
Aloha 'oe,
Ich arbeite gerade an einer kleinen Javascriptspielerei, die mich allerdings vor Probleme stellt:
Ich will aus einer Tabelle jeglichen Text einlesen, löschen und ihn anschließend im Schreibaschinenstil wieder ausgeben, d.h. die Buchstaben sollen einer nach dem anderen in den entsprechenden DOM-Knoten geschrieben werden.
Das Einlesen und Löschen der Inhalte der Textknoten funktioniert auch ohne Probleme.
Als Ergebnis erhalte ich ein Array textknoten[] , indem diese Inhalte gespeichert sind.
Nun soll hier testweise der Inhalt von textknoten[0] in das erste td-Element wie erläutert geschrieben werden:
schreibe(document.getElementsByTagName("td")[0]);
function schreibe(knoten) {
var buchstabe = document.createTextNode((textknoten[0]).substr(0,1));
textknoten[0] = textknoten[0].substr(1, textknoten[0].length - 1);
knoten.firstChild.appendData(buchstabe.nodeValue);
if (textknoten[0] != "") {
window.setTimeout("schreibe(" + knoten + ")", 500); //*Fehlermeldung
}
}
Der erste Buchstabe wird korrekt geschrieben, allerdings tritt beim erneuten Aufruf von schreibe(...) folgende Fehlermeldung auf:
Fehler: missing ] after element list
Zeile: *Fehlermeldung
Quelltext:
schreibe([object HTMLTableCellElement])
1. Was hat die Fehlerkonsole da zu meckern?
2. Wie behebe ich den Fehler?
Danke im Voraus.
Gruß, Volker
Hi,
window.setTimeout("schreibe(" + knoten + ")", 500); //*Fehlermeldung
>
> Quelltext:
> schreibe([object HTMLTableCellElement])
>
> 1. Was hat die Fehlerkonsole da zu meckern?
dass der Code "schreibe([object HTMLTableCellElement])", den Du auszuführen versuchst, keinen Sinn ergibt.
> 2. Wie behebe ich den Fehler?
Das Stichwort lautet Closure.
Cheatah
--
X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
X-Will-Answer-Email: No
X-Please-Search-Archive-First: Absolutely Yes
Das Stichwort lautet Closure.
Ah, ein
window.setTimeout(function(){ schreibe(knoten);}, 500);
löst das Problem, danke.
Allerdings hab ich noch meine Verständnisschwierigkeiten:
dass der Code "schreibe([object HTMLTableCellElement])", den Du auszuführen versuchst, keinen Sinn ergibt.
Warum hat das keinen Sinn? Ich nehme die Variable "knoten", und übergebe sie dem Aufruf derselben Funktion erneut als Parameter.
Naiv überlegt würde ich sagen, dass dieser erneute Aufruf doch vor Beendigung des aktuellen Durchlaufs der Funktion schreibe(knoten) erfolgt ist, und daher müsste doch auch die Variable "knoten" verfügbar sein.
Warum ist dem nicht so?
Gruß, Volker
Hi,
dass der Code "schreibe([object HTMLTableCellElement])", den Du auszuführen versuchst, keinen Sinn ergibt.
Warum hat das keinen Sinn? Ich nehme die Variable "knoten", und übergebe sie dem Aufruf derselben Funktion erneut als Parameter.
nein, in diesem Aufruf ist von der Variable "knoten" nicht die Rede. Er lautet:
schreibe([object HTMLTableCellElement])
Das ist exakt das, was auszuführen versucht wird. Also die Funktion "schreibe", die als Parameter den JavaScript-Code(!) "[object HTMLTableCellElement]" übergeben bekommt.
Warum ist dem nicht so?
Weil Du eine String-Verknüpfung von "schreibe(", der String-Repräsentation eines DOM-Objektes, sowie ")" gewählt hast.
Cheatah
Grundlage für Zitat #1016.
Lieber Volker,
Ich will aus einer Tabelle jeglichen Text einlesen, löschen und ihn anschließend im Schreibaschinenstil wieder ausgeben, d.h. die Buchstaben sollen einer nach dem anderen in den entsprechenden DOM-Knoten geschrieben werden.
ich habe da etwas ähnliches bereits gemacht. Vielleicht ist das ja etwas für Dich?
Liebe Grüße aus Ellwangen,
Felix Riesterer.