Roger Lewin: Zuweisen von langen Strings mit Umbrüchen zu Textareas ?

Hallo,

dieses mal etwas komplexer:

Situation:

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

Problem:

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

  1. 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

    --
    Nein, ich beantworte keine Fragen per eMail. Dafür ist das Forum da.
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so!"
    1. 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

      1. 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