# Ausgabe mehrdimensionales Array



## Jutti (30. Juli 2004)

Hallo !

Baue grade eine Preisliste um und habe ein mehrdimensionales Array:

```
<html>
<head>
<title>Test</title>
<script type="text/javascript">
<!--
var a =new Array(4)
for (var i=0; i< a.length; ++i)
a [i]=new Array (10);
a[3][1]="Anzahl";
a[3][2]="Bestellnr.";
document.write(a[3][1]);
document.write(a[3][2]);
//-->
</script>
</head>
<body>
<table border=1>
<th>Hi</th>
<td>"document.write(a[3][1])"</td>
<td>halllo</td>
</table>
</body>
</html>
```


jedoch wird in der Tabelle der Wert von dem Array (a[3][1]) nicht ausgegeben. Funktionieren solche Ausgaben nur im Value von Input-Feldern oder geht das auch irgendwo ohne?

Vielen Dank schon mal
liebe Grüße
Jutti


----------



## Krypthonas (30. Juli 2004)

Woher soll der HTML Parser denn wissen, wann eine Client Script Anweisung kommt und wann nicht? Richtig, garnicht, wenn man ihn dies nicht beibringt.

Du musst, um den Array Auszugeben in deiner Zeile *<script>CODE</script>* hinzufügen. Dort wo Code steht, dein Objekt document.write platzieren  .Dann klappt es. 

In diesem Sinne


----------



## Jutti (30. Juli 2004)

Danke für Deine schnelle Antwort! 
Meinst Du so?  ( net) hab sicher was vergessen oder nen Fehler


```
<html><head><title>Test</title>
</head><body>
<script type="text/javascript">
<!--
 var Mitarbeiter=new Array();

 Mitarbeiter[0] = new Array();
 Mitarbeiter[0]["Name"] ="\""+parent.frames[0].Woerter[13]+"\"";
 Mitarbeiter[0]["Vorname"] = "Hans";
 Mitarbeiter[0]["Wohnort"]= "Dresden";

 Mitarbeiter[1]=new Array()
 Mitarbeiter[1][1] = "Schulze";
 Mitarbeiter[1][2] = "Frauke";
 Mitarbeiter[1]["Wohnort"]= "Berlin";

 for (var i=0;i<Mitarbeiter.length;i++)
 {
  document.write("<dl><dt>Mitarbeiter "+(i+1)+"<\/dt>");
   for (var Eigenschaft in Mitarbeiter[i])
      document.write("<dd>"+ Eigenschaft + ": "+Mitarbeiter[i][Eigenschaft]+"<\/dd>");
  document.write("<\/dl>");
 }
//-->
</script>
<table border=1>
<th>Hallo</th>
<td><script>document.write(Mitarbeiter[1][1]</script> 
</table>
</body>
</html>
```


----------



## DrOverflow (30. Juli 2004)

Warum machen nur alle immer den selben Fehler...  

Platziere den JavaScript-Code im Head, nicht im Body.

Und am besten packst du alles, was ausgegeben werden soll, in eine eigene Funktion, welche du dann aufrufst (zB im Body-Tag mit onLoad=" ").

Test mal den Code, bei mir kommt eine schöne Ausgabe heraus:


```
<html>
 <head>
  <title>Test</title>

<script type="text/javascript">
<!--
function schreibe()
{
var Mitarbeiter=new Array();

Mitarbeiter[0] = new Array();
Mitarbeiter[0]["Vorname"] = "Hans";
Mitarbeiter[0]["Wohnort"]= "Dresden";

Mitarbeiter[1]=new Array()
Mitarbeiter[1][1] = "Schulze";
Mitarbeiter[1][2] = "Frauke";
Mitarbeiter[1]["Wohnort"]= "Berlin";

for (var i=0;i<Mitarbeiter.length;i++)
 {
 document.write("<dl><dt>Mitarbeiter "+(i+1)+"<\/dt>");
 for (var Eigenschaft in Mitarbeiter[i])
 document.write("<dd>"+ Eigenschaft + ": "+Mitarbeiter[i][Eigenschaft]+"<\/dd>");
 document.write("<\/dl>");
 }
}
//-->
</script>
 </head>
 <body onLoad="schreibe()">
  <table border=1>
   <th>Hallo</th>
   <td> 
  </table>
 </body>
 </html>
```

Naja, so ganz in Ordnung ist die Ausgabe noch nicht, da ich nicht weiß, was ausgegeben werden soll, aber das dürfte zu modifizieren sein...

lg D;-]c


----------



## Sven Mintel (30. Juli 2004)

> Warum machen nur alle immer den selben Fehler...
> 
> Platziere den JavaScript-Code im Head, nicht im Body.


 ...hallo Doc...(ich bins wieder)
....es ist keinerlei Problem dabei, einen Scriptblock im <body> zu notieren....wenn man im <body> etwas per write() ausgeben will, ist es sogar unerlässlich.

Bei deiner Variante wird 

etwas in den <head> geschrieben....da hehört es kaum hin
da die write()-Anweisung nicht beim Einlesen der Datei erfolgt, der aktuelle Inhalt der Seite gelöscht.


----------



## Jutti (30. Juli 2004)

*einen Array mit ForSchleife mehrmals wiederholen*

Hallo ihr alle!
hab mal wieder versucht weiterzubasteln.... hab auch schon ein paar FOR-Schleifen eingebaut aber meine Frage: wie muss das genau aussehen damit sich das Array einfach mehrmals wiederholt es iss ja immer die selbe Zeile in der Tabelle.... bis auf der Text der reingeschrieben werden muss.... per Hand wäre es zu lang+ aufwendig.
aktuelles Script:
<html><head><title>Test</title>
</head>
<script type="text/javascript">
<!--
var Mitarbeiter=new Array();

```
Mitarbeiter[0] = new Array();
Mitarbeiter[0][1]  =" ";
Mitarbeiter[0][2]  =" "; 
Mitarbeiter[0][3]  = "\""+parent.frames[0].Woerter[0]+"\"";
Mitarbeiter[0][4]  = "\""+parent.frames[0].Woerter[1]+"\"";
Mitarbeiter[0][5]  = "\""+parent.frames[0].Woerter[2]+"\"";
Mitarbeiter[0][6]  = "\""+parent.frames[0].Woerter[3]+"\"";
Mitarbeiter[0][7]  = "\""+parent.frames[0].Woerter[4]+"\"";
Mitarbeiter[0][8]  = "\""+parent.frames[0].Woerter[5]+"\"";
Mitarbeiter[0][9]  = "\""+parent.frames[0].Woerter[6]+"\"";
Mitarbeiter[0][10] = "\""+parent.frames[0].Woerter[7]+"\"";
Mitarbeiter[0][11] = "\""+parent.frames[0].Woerter[8]+"\"";
Mitarbeiter[0][12] = "\""+parent.frames[0].Woerter[9]+"\"";


for (h=0; h<11; h++)
{
for (i=0; i<11; i++)
 {
for (j=0; j<11; j++) 
  {
Mitarbeiter[1]=new Array()
Mitarbeiter[1][i] = "\""+parent.frames[0].Woerter[j]+"\"";
  }
 
 } 
}
for (var i=0;i<Mitarbeiter.length;i++)
{
document.write("<dl><dt>Mitarbeiter "+(i+1)+"<\/dt>");
for (var Eigenschaft in Mitarbeiter[i])
document.write("<dd>"+ Eigenschaft + ": "+Mitarbeiter[i][Eigenschaft]+"<\/dd>");
document.write("<\/dl>");
}
//-->
</script>

<h1>SecureIP Solution Preisliste</h1>
<body>
<table border=1>
<th>Anzahl</th>
<th>St&uuml;ck-Netto-Einzelpreis</th>
<th>St&uuml;ck-Netto-Teilsumme</th>
<th>St&uuml;cklisten Hardware und Softwarevarianten</th>
<th>Bestellnummer</th>
<th>Beschreibung Komponenten und Bestandteile</th>
<th>Bemerkungen</th>
<th>Artikel-Leistungsnummer</th>
<th>Vertrags-Gegenstands-Nummer</th>
<tr></tr>
<td><script>document.write(Mitarbeiter[0][1])</script></td> 
<td><script>document.write(Mitarbeiter[0][2])</script></td>
<td><script>document.write(Mitarbeiter[0][3])</script></td>
<td><script>document.write(Mitarbeiter[0][4])</script></td>
<td><script>document.write(Mitarbeiter[0][5])</script></td>
<td><script>document.write(Mitarbeiter[0][6])</script></td>
<td><script>document.write(Mitarbeiter[0][7])</script></td>
<td><script>document.write(Mitarbeiter[0][8])</script></td>
<td><script>document.write(Mitarbeiter[0][9])</script></td>



</table>
</body>
</html>
```


Vielen Dank schonmal!

liebe Grüße Jutti


----------



## Sven Mintel (31. Juli 2004)

Einen Array durchläufst du per:

```
for(j=0;j<arrayObj.length;++j)
    {
    //....
    }
```
in deinem Beispiel wäre das:

```
for(j=1;j<Mitarbeiter[0].length;++j)
    {
    document.write('<td>'+Mitarbeiter[0][j]+'</td>');
    }
```
...aber wohlgemerk....<script> ist zwar im <body> erlaubt, nicht jedoch bspw.in <tr> und <table>(was für deinen Zweck notwendig wäre).

Gehe davon aus, dass <script> im <head> und in allen Elementen erlaubt ist, welche reinen Text enthalten dürfen.
Du musst daher die Tabelle komplett per write() in die Seite schreiben:

```
<body>
<script type="text/javascript">
document.write('<table border="1"><tr>')
for(j=1;j<Mitarbeiter[0].length;++j)
    {
    document.write('<td>'+Mitarbeiter[0][j]+'<\/td>');
    }
document.write('<\/tr><\/table>')
</script>
</body>
```


----------



## DrOverflow (2. August 2004)

fatalus hat gesagt.:
			
		

> ...hallo Doc...(ich bins wieder)
> ....es ist keinerlei Problem dabei, einen Scriptblock im <body> zu notieren....wenn man im <body> etwas per write() ausgeben will, ist es sogar unerlässlich.
> 
> Bei deiner Variante wird
> ...



...Hallo fatalus!  

Wie so oft bzw wie immer muss ich dir recht geben, da hab ich wieder mal einen großen Fehler gemacht! :sad: 

Ist natürlich ganz logisch, dass man Scriptblöcke innerhalb des Bodys platzieren kann! 

Ich sollte das nächste Mal denken, bevor ich mit dem Schreiben anfange...  

lg D;-]c


----------



## Sven Mintel (2. August 2004)

Das ist doch kein Grund, Tränen zu vergiessen


----------



## Jutti (3. August 2004)

*Aufbau Tabelle mit Schleife in schön?*

Hallo Leute!

Habe die Schleife mal so eingebaut .  auch super .... kleines Problemchen.... wenn ihr euch das foto mal anschaut sieht man das das alles erstmal ganz richtig iss ... bei den ersten 2 Spalten steht nix drin weil das erst vom Kunden ausgefüllt wird und sobald die Anzahl da iss soll sich auch sofort der Preis berechnen lassen .... wisst ihr wie sowas gehen kann?
und dann schreibt die Schleife mehr rein als sie soll... nach den 9 Stück glaub ich iss Ende und dann soll das in die 2. Zeile geschrieben werden....
wie geht das?

Vielen Dank schon mal liebe Grüße
Jutti


----------



## DrOverflow (3. August 2004)

Für das eine Problem hätt ich schon mal einen Lösungsvorschlag (wenn der Benutzer etwas eingibt soll sofort der Preis berechnet werden). 

Am sinnvollsten ist es, wenn du Event-Handler bei den Eingabefeldern verwendest.

Du kannst zwischen verschiedenen Event-Handlern für diese Aktion wählen. 
Zum einen wäre das
onChange="..."
dh sobald eine Änderung erfolgt, solltest du die Funktion aufrufen, die den Preis berechnet, die Gültigkeit der Eingabe überprüfen und das Ergebnis dann gleich in das Feld schreiben. 
Und zum anderen gäbe es noch die Event-Handler onKeydown="..." und onKeyup="...", sind aber nicht unbedingt für dein Problem zu empfehlen. 

Das Problem mit der Schleife muss ich mir erst anschauen, 

lg D;-]c


----------



## Jutti (4. August 2004)

*assoziatives Array Zahl ausblenden?*

Hallo!

habe hier ein assoziat. Array und möchte das die 2. Zahl davon nicht mit ausgegeben wird:

```
<html>
<head><title>Test</title>
</head>
<script type="text/javascript">
<!--
var Mitarbeiter=new Array();

Mitarbeiter[0] = new Array();
Mitarbeiter[0][1]  ="hallo ";
Mitarbeiter[0][2]  ="halli"; 
Mitarbeiter[0][3]  ="halla"; 

for (var i=0;i<Mitarbeiter.length;i++)
{
document.write("<dl><dt>Mitarbeiter "+(i+1)+"<\/dt>");
for (var Eigenschaft in Mitarbeiter[i])
document.write("<dd>"+ Eigenschaft + ": "+Mitarbeiter[i][Eigenschaft]+"<\/dd>");
document.write("<\/dl>");
}
</script>


</body>
</html>
```
die Ausgabe sieht momentan so aus:
Mitarbeiter 1
1: ha 
2: hi
3: "Summe1"

und da sollen die Nummern 1, 2 und 3 gar nicht angezeigt werden geht das?


----------



## DrOverflow (4. August 2004)

Wie kommst du denn bei den Zuweisungen
hallo
halli
halla
auf das Ergebnis
ha
hi
Summe 1 ?

Für was machst du bei den Definitionslisten immer bei </dt> ein <\/dt> ?!  

lg D;-]c


----------



## Jutti (4. August 2004)

oh das war die falsche Ausgabe sorry 

hier die richtige:
Mitarbeiter 1
1: hallo 
2: halli
3: halla

und mit dem dt oder ähnliches das iss noch aus selfhtml.... sorry!

nee aber mal ne grundsätzliche Frage: ich will ja im Prinzip nur eine Tabelle aufbauen in der ich jedes einzelne Feld ansprechen kann.... das brauche ich um so dann die summe z.B. (Anzahl*Preis) ausrechnen zu können...

Fällt Dir vielleicht noch ein ob das irgendwie anders geht als wie mit einem assoziativen Array?

liebe Grüße


----------



## DrOverflow (4. August 2004)

Du musst dich doch nicht entschuldigen...  

Ja sicher geht das, dass du die Felder der Tabelle ansprichst - vorausgesetzt, es handelt sich dabei um Felder vom Typ <input type="text">. 
Denen kannst du einen Namen geben, und diese dann mit diesem ansprechen sowie die Werte auslesen, ändern, löschen, ...

Und wegen deinem Schleifenproblem, mach doch die Schleife einfach anders und füg eine Bedingung ein.
for(var i = 0; i < Mitarbeiter.Eigenschaften.length; i++)
{
if ( i != IrgendeinIndexDerIgnoriertWerdenSoll ) 
 //Ausgabe
}

lg D;-]c


----------

