Claus: Textarea mit Javascript Wert zuweisen

Aus einem zweidimensionalen Array sollen bedingt Werte ausgelesen werden und in einem textarea ausgegeben werden. Die dazu geschriebene Function funktioniert auch gut. Leider wird im textarea aber immer nur der letzte gefundene Wert angezeigt (könnte sein, dass die vorherigen auch eingeschrieben aber dann vom nächsten überschrieben werden). Textarea als Ausgabe habe ich gewählt, weil bei Aufruf der function ja nicht klar ist , wie viele Ergebnisse gefunden werden. Das Array hat real 2400 Zeilen und jeweils 5 Spalten). Wie kann da eine mehrzeilige Ausgabe realisiert werden? Habe im Forum-Archiv keinen Hinweis gefunden. Hinweis: der Browser dient nur als Arbeitsumgebung , die Anwendung soll nur local auf einem Rechner laufen. Deshalb ist ein link auch nicht möglich.
Kann eine andere Ausgabemethode (Tabelle oder Frame ) einfacher sein? Bin aber blutiger HTML-Anfänger und kann nicht allzuviel (außerdem 72).
Hier der Quelltext:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Array_Test</title>
<meta name="author" content="Claus">
<meta name="editor" content="html-editor phase 5">
<script type="text/javascript">
var DB = new Array(9);
for (var i = 1; i <=9 ; ++i)
DB[i] = new Array(5);
DB[1][1]  = "1980" ;
DB[1][2]  = "5" ;
DB[1][3]  = "Tanz der Vulkane" ;
DB[1][4]  = "1" ;
DB[1][5]  = "Vulkane auf Hawai, Formen der Lava, Früherkennung der Ausbrüche" ;
DB[2][1]  = "1980" ;
DB[2][2]  = "5" ;
DB[2][3]  = "Akropolis passe" ;
DB[2][4]  = "61" ;
DB[2][5]  = "Athen 1980, Verfall der historischen Bauten auf der Akropolis, Luftzverschmutzung durch Autoverkehr, Parthenon, Erechtheion" ;
DB[3][1]  = "1980" ;
DB[3][2]  = "5" ;
DB[3][3]  = "Nur nicht auffallen" ;
DB[3][4]  = "61" ;
DB[3][5]  = "Mimikry, Heuschrecken, Zikaden, Helmleguan, Gottesanbeterin" ;
DB[4][1]  = "1980" ;
DB[4][2]  = "5" ;
DB[4][3]  = "Die Franzosen der neuen Welt" ;
DB[4][4]  = "80" ;
DB[4][5]  = "Quebec" ;
DB[5][1]  = "1980" ;
DB[5][2]  = "5" ;
DB[5][3]  = "Boeing" ;
DB[5][4]  = "107" ;
DB[5][5]  = "Produktion Herstellung Flugzeuge Boeing" ;
DB[6][1]  = "1980" ;
DB[6][2]  = "5" ;
DB[6][3]  = "Die grünen Patriarchen" ;
DB[6][4]  = "128" ;
DB[6][5]  = "Baumsterben, Umweltverschmutzung, Silhouette von Laubbäumen," ;
DB[7][1]  = "1980" ;
DB[7][2]  = "4" ;
DB[7][3]  = "Gold; Mythos und Realität eines Edelmetalls" ;
DB[7][4]  = "8" ;
DB[7][5]  = "Gold als Machtsymbol, Spekulationsgeschäfte, Minen in Südafrika, Soziale Lage der schwarzen Kumpel" ;
DB[8][1]  = "1980" ;
DB[8][2]  = "4" ;
DB[8][3]  = "Rügen; Und im Sommer nach Binz" ;
DB[8][4]  = "34" ;
DB[8][5]  = "Insel Rügen Kreidefelsen, Fischerei, Urlaubsbetrieb, Kleinbahn von Göhren nach Putbus, Geschichte und Gegenwart, Baudenkmale, Hünengräber" ;
DB[9][1]  = "1980" ;
DB[9][2]  = "4" ;
DB[9][3]  = "Dem Himmel verfallen" ;
DB[9][4]  = "56" ;
DB[9][5]  = "Fallschirmspringen,  Gruppenspringen und Einzelspringen" ;

function Ausgabe () {
  var Anzahl = 9;
  var i, u, v, w, x, y, z, mystr, gefunden;
  gefunden = 0;
  /*var Suchwort = document.meinForm.myFeld.value;*/
  var Suchwort = "verschmutzung";
   for (i = 1; i <= Anzahl; ++i) {
    u = "Jahrgang: " + DB[i][1];
    v = "Heft " + DB[i][2];
    x = DB[i][3];
    y = DB[i][5].indexOf(Suchwort);
    z = DB[i][1];
    w = "Seite: "  + DB[i][4];
    if (y != -1){
    mystr = u + "  " + v + "  " + w + "  " + x ;
   window.document.meinForm.user_eingabe.value = mystr;
    gefunden = 1;
    }
  }
if (gefunden == 0){
  alert("nicht gefunden");
}

}
</script>

<style type="text/css">
div {border:thin solid #800; text-align:center;}
#a {border:none; width:60%; height:35%; position:absolute; top:140px; left:20%;}
#b {border:none; width:10%; height:5%; position:absolute; top:350px; left:45%;}
#c {border:thin; width:20%; height:5%; position:absolute; top:10px; left:25%;}
</style>

</head>

<body text="#000000" bgcolor="#FFFFFF" link="#FF0000" alink="#FF0000" vlink="#FF0000">
Hallo Welt!
<form action="input_text.htm" name="meinForm">
<div id="a">
     <textarea name="user_eingabe" cols="70" rows="10">Ausgabefeld</textarea>
    </div>
    <div id="b">
     <input type="button" value="Ausgabe" onclick="Ausgabe()">
    </div>

<input name="myFeld" type="text" size="30" maxlength="40">

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

  1. @@Claus:

    nuqneH

    Leider wird im textarea aber immer nur der letzte gefundene Wert angezeigt (könnte sein, dass die vorherigen auch eingeschrieben aber dann vom nächsten überschrieben werden)

    Ja, denn die Ausgabe erfolgt innerhalb der Schleife:

    for (i = 1; i <= Anzahl; ++i) {
        u = "Jahrgang: " + DB[i][1];
        v = "Heft " + DB[i][2];
        x = DB[i][3];
        y = DB[i][5].indexOf(Suchwort);
        z = DB[i][1];
        w = "Seite: "  + DB[i][4];
        if (y != -1){
        mystr = u + "  " + v + "  " + w + "  " + x ;
       window.document.meinForm.user_eingabe.value = mystr;
        gefunden = 1;
        }
      }

    Initialisiere mystr vor der Schleife, evtl. im Schleifenkopf:
      for (var i = 1, mystr = '';)

    Ach ja, und nicht das var vergessen, mache die Variablen lokal!

    In der Schleife wird mystr dann in jedem Schleifendurchlauf erweitert (nicht überschrieben!):
      mystr += u + " " + v + " " + w + " " + x;

    Die Ausgabe erfolgt dann nach der Schleife.

    Qapla'

    --
    Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
    (Mark Twain)
    1. »»&& nuqneH

      Danke für die schnelle Antwort. Ist auch logisch so. Kann man das auch so machen, dass die Ausgabe tabellarisch erfolgt (Die einzelnen Ausgabezeilen haben unterschiedliche Breite) also einen Zeilenumbruch einfügen?

      Claus

      1. Hi,

        Kann man [...] auch [...] einen Zeilenumbruch einfügen?

        http://de.selfhtml.org/javascript/sprache/notationen.htm

        MfG ChrisB

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
        1. Danke noch einmal an Euch alle. Ziel ist erreicht, bin happy :-)

          Claus

  2. Moin Moin!

    Leider wird im textarea aber immer nur der letzte gefundene Wert angezeigt (könnte sein, dass die vorherigen auch eingeschrieben aber dann vom nächsten überschrieben werden).

    Natürlich. Eine Zuweisung an value überschreibt den alten Wert. Wenn Du anhängen willst, mußt Du Javascript das auch sagen:

    meineTextarea.value=meineTextarea.value+"noch mehr text";

    Kann eine andere Ausgabemethode (Tabelle oder Frame ) einfacher sein?

    Du könntest Dir über DOM-Methoden eine Tabelle bauen.

    Grober, ungetesteter Anfang:

      
    var tab=document.createElement("table");  
    var thd=document.createElement("thead");  
    tab.appendChild(thd);  
    var tr=document.createElement("tr");  
    thd.appendChild(tr);  
    var th=document.createElement("th");  
    tr.appendChild(th);  
    var txt=document.createTextNode("Überschrift Spalte 1");  
    th.appendChild(txt);  
    /* usw. */  
    var tbd=document.createElement("tbody");  
    tab.appendChild(tbd);  
    tr=document.createElement("tr");  
    tbd.appendChild(tr);  
    var td=document.createElement("td");  
    tr.appendChild(td);  
    var txt=document.createTextNode("Inhalt Zeile 1 Spalte 1");  
    td.appendChild(txt);  
    /* usw. */  
    var bdy=document.getElementsByTagName("body")[0];  
    bdy.appendChild(tab);  
    
    

    Du kannst natürlich auch schon ein leeres Tabellen-Grundgerüst ins Dokument packen und das dann per DOM umbauen, das geht ganz ähnlich, siehe <http://de.selfhtml.org/javascript/objekte/node.htm@title="node"-Objekt in SelfHTML>

    Alexander

    --
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
  3. @@Claus:

    nuqneH

    Textarea als Ausgabe habe ich gewählt

    Falsch. textarea ist ein Eingabefeld, kein Ausgabefeld.

    weil bei Aufruf der function ja nicht klar ist , wie viele Ergebnisse gefunden werden. Das Array hat real 2400 Zeilen und jeweils 5 Spalten). Wie kann da eine mehrzeilige Ausgabe realisiert werden?

    Was genau möchtest du? Dass die Ausgabe in einer Box mit fester Höhe erscheint (ggfs. mit Scrollbalken) oder dass die Ausgabe einfach auf der Seite landet und mit dem Seiten-Scrollbalken gescrollte werden kann (vermutlich die nutzerfreundlichere Variante)?

    Qapla'

    --
    Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
    (Mark Twain)