Zuweisen von langen Strings mit Umbrüchen zu Textareas ?
Roger Lewin
- javascript
Hallo,
dieses mal etwas komplexer:
Ich habe folgenden Code:
<a href="#" onClick="opener.document.form.Loesung.value='#(query.GetData(queryCol))#';self.close();">#(query.GetData(queryCol))#</a>
Der Ausdruck zwischen des Hashes (#) liefert einen langen String (500+ Zeichen)aus einer Datenbank, der Textumbrüche enthalten kann.
Der angesprochene Pfad (opener.document.form.Loesung.value) ist eine Textarea im Parent-Window. Diese Textarea ist vom Umbruchstyp: Standard
Der lange String wird in die Textarea im Parent übernommen, wenn dieser keine Zeilenumbrüche enthält, jedoch nicht, wenn er welche enthält.
Wie kann ich erreichen, daß ein langer String **mit** Umbrüchen auch in der Textarea des Parents erscheint ?
Gruß
Roger Lewin
Moin Moin !
Du mußt die Strings aus der Datenbank erstmal in Javascript-verträgliche Strings umwandeln, insbesondere die Zeilenumbrüche und Single Quotes. Daraus ergibt sich, daß Du z.B. auch Backslashes escapen mußt. Und in manchen Fällen (immer nach einem <) müssen auch Forward Slashes escaped werden.
In Perl sieht das z.B. so aus:
sub JavascriptString($) # $string => $string, quoted and ready for Javascript
{
my $text=shift;
$text=~s/\/\\/gso;
$text=~s///\//gso;
$text=~s/'/\'/gso;
$text=~s/\n/\n/gso;
$text=~s/\r/\r/gso;
return "'$text'";
}
Erst das Ergebnis dieser Funktion darfst Du in die HTML-Ausgabe einfügen.
Alexander
Das Problem ist, daß der Ausdruck in #'s eine Echtzeitersetzung ist, sprich direkt ausgewertet wird, wenn die Seite lädt.
Nehme ich eine Textarea, die als Inhalte direkt diesen #-Ausdruck enthält, wird dieser richtig angezeigt, jedoch bekomme ich sie einfach nicht rüber in das Parentfenster
Ein Workaround, den ich mir vorstellen könnte, ist daß ich ein invisible div habe, daß die textare mit dem Inhalt direkt drin enthält und daß der Wert, der im OnClick hinter dem Gleichheitszeichen aufgerufen wird, ein aufbereiteter Wert aus der Textarea im Invisible div ist.
Aber ich suche noch nach einfacheren Wegen, weil ich mir das parsen des Strings eigentlch sparen will....
Roger
Habs gelöst bekommen : (was ein Krampf.....)
Mit der Zeile:
<a href="#" id="#(query.GetData(1))#" onClick="x=document.getElementById(#(query.GetData(1))#).childNodes[0].nodeValue;opener.document.form.Loesung.value=x;self.close();">
#(query.GetData(queryCol))#
</a>
läuft es perfekt