Übergabe von Arrays an Funktionen
Frank Lumnitzer
- javascript
Halöle,
ich grübele da schon geraume Zeit über einem Problem.
Ich habe ein Array erstellt, welches die Namen von Bilddateien enthält.
z.B. Bilder = new Array(P01001.jpg, P01002.jpg, ...);
Dieses Array möchte ich innerhalb eines Scripts an eine Funktion als Argument übergeben.
write('<a href="javascript:Bildfunktion(' + "'" + Bilder + "'" + ')></a>');
Dieses Argument kommt aber innerhalb der Funktion nur als String an. Lasse ich im a-Tag aber die Anführungszeichen weg, kommt
Objekt P01001 nicht definiert.
als Fehlermeldung.
Hat jemand eine Idee, wie ich dieses Array auch so übergeben kann, dass es als Array als Argument ankommt?
Danke
z.B. Bilder = new Array(P01001.jpg, P01002.jpg, ...);
Dieses Array möchte ich innerhalb eines Scripts an eine Funktion als Argument übergeben.
write('<a href="javascript:Bildfunktion(' + "'" + Bilder + "'" + ')></a>');
Oha, hier ist Anführungszeichenkrieg! ;) Naja, der Punkt ist eigentlich: Wenn "Bilder" ein Array ist, dann solltest du mit "Bilder[index]" auch nur ein Element des Arrays ausgeben, und nicht das ganze Array. Ich denke, das ist dein Problem.
Dieses Argument kommt aber innerhalb der Funktion nur als String an. Lasse ich im a-Tag aber die Anführungszeichen weg, kommt
Objekt P01001 nicht definiert.
als Fehlermeldung.
Hat jemand eine Idee, wie ich dieses Array auch so übergeben kann, dass es als Array als Argument ankommt?
Ähm, kommt natürlich ganz darauf an, was im Link stehen soll. Wenn du mal schreibst, wie der Link hinterher aussehen soll, kann man vielleicht auch den Fehler finden, der im write-Kommando steckt.
Danke
- Sven Rautenberg
z.B. Bilder = new Array(P01001.jpg, P01002.jpg, ...);
Dieses Array möchte ich innerhalb eines Scripts an eine Funktion als Argument übergeben.
write('<a href="javascript:Bildfunktion(' + "'" + Bilder + "'" + ')></a>');
Oha, hier ist Anführungszeichenkrieg! ;) Naja, der Punkt ist eigentlich: Wenn "Bilder" ein Array ist, dann solltest du mit "Bilder[index]" auch nur ein Element des Arrays ausgeben, und nicht das ganze Array. Ich denke, das ist dein Problem.
Nun soweit ist mir dies auch klar. Ich möchte das Array Bilder an eine andere Funktion als Argument übergeben, um dann innerhalb der Funktion mit Bilder[index] auf die jeweiligen Array-Bestandteile zugreifen zu können. Das Problem: Nach wie vor, das übergebene Element wird transformiert in einen String. Somit kann ich nur Bilder[0] ansprechen, und dort sind alle Elemente von Bilder als String aufgeführt.
Dieses Argument kommt aber innerhalb der Funktion nur als String an. Lasse ich im a-Tag aber die Anführungszeichen weg, kommt
Objekt P01001 nicht definiert.
als Fehlermeldung.
Hat jemand eine Idee, wie ich dieses Array auch so übergeben kann, dass es als Array als Argument ankommt?
Ähm, kommt natürlich ganz darauf an, was im Link stehen soll. Wenn du mal schreibst, wie der Link hinterher aussehen soll, kann man vielleicht auch den Fehler finden, der im write-Kommando steckt.
Der Link sieht so aus (wie oben)
write('<a href="javascript:Bildfunktion(' + "'" + Bilder + "'" + ')></a>');
Hintergund: Per Script schreibe ich eine neue HTML Datei, diese beinhaltet diesen Link auf ein Javascript. Innerhalb der Funktion "Bildfunktion" liegt das Array im besprochenen String vor und NICHT mehr als Array.
Danke
- Sven Rautenberg
Trotzdem vielen Dank ersteinmal
Hi Frank!
Nun hab ich Dein Problem auch so halbwegs verstanden. Prinzipiell uebergibt man Arrays einfach mit ihrem Namen, aber natuerlich nur, wenn es ein Array bleiben soll. Du willst jedoch das Array nehmen und die ganzen Werte darin in eine neue Datei schreiben. Das geht entweder step by step so:
dw = document.write; // nur ne kleine abkuerzung
dw("var Bilder = new Array();\n"); // hier entsteht ein neues 'Bilder' im neuen dokument
for (var i=0; i<Bilder.length; i++) // array-Inhalte kopieren
dw("Bilder[" + i + "] = '" + Bilder[i] + "';\n"); // funktioniert so nur mit Strings!
und spaeter:
dw('<a href="javascript:Bildfunktion(Bilder);"></a>\n');
Hier schreibst Du dann einfach im neuen Dokument die Anweisung, das Bilder-Array zu uebergeben. Aber das Bilder ja sowieso weiter oben im erzeugten Quelltext steht, koennte die Funktion ja auch direkt drauf zugreifen. Vermutlich willst Du aus verschiedenen Gruenden lieber an Ort und Stelle ein anonymes Array erzeugen und das an die Funktion uebergeben. Das geht dann ungefaehr so:
dw('<a href="javascript:Bildfunktion( [');
Hier beginnt das anonyme Array: ^
Dann einfach die Werte wieder ausgeben:
dw("'" + Bilder.join("', ") + "'");
// erzeugt etwa 'P01001.jpg', 'P01002.jpg', '...'
(Funktioniert wiederum nur, wenn die Elemente alle Strings sind.)
Link abschliessen:
dw('] );\n"');
^ ^- Funktionsaufruf schliessen
+--- anonymes Array schliessen
HTH, So long