JS Variable in opener nur temporär vorhanden!?!
Georg Waltner
- javascript
Hallo!
Ich habe bei der Forumssuche nichts gefunden, was mir bei meinem Problem weiter helfen könnte.
Folgendes: Ich habe ein PopUp, aus dem Text gewählt werden kann. Diesen Text speichere ich in ein Array im opener:
/* Opener Document */
var sp_array = new Array();
/* PopUp Document*/
opener.sp_array[opener.sp_array.length] = new Array(opener.sp_array.length, processes[sub]["stitle"], processes[sub]["stext"]);
processes stellt ein Array dar, in dem Titel und Text gespeichert sind. Daraus kann man wählen.
Nun das Problem: Solange das PopUp geöffnet bleibt, kann ich z.B. mittels sp_array[0][1] auf den Titel des ersten Elements zugreifen. Wenn ich das PopUp schließe, bekomme ich jedoch eine Fehlermeldung. Ich kann nicht mehr auf die Felder des jeweiligen Array Elements zugreifen. Jedoch ergibt sp_array.length die richtigen Elemente. So was fliegt aber dann wieder, und zwar erst in der alert Zeile...:
for(i=num; i<window.sp_array.length; i++)
{
if(window.sp_array[i])
alert("Länge " + window.sp_array[i].length);
}
Bei Firefox funktioniert's übrigens ohne Probleme.
MfG, Georg.
hi,
/* PopUp Document*/
opener.sp_array[opener.sp_array.length] = new Array(opener.sp_array.length, processes[sub]["stitle"], processes[sub]["stext"]);processes stellt ein Array dar, in dem Titel und Text gespeichert sind. Daraus kann man wählen.
processes[sub]["stitle"] und processes[sub]["stext"] sind also skalare Werte, und nicht etwa selber auch wieder Arrays oder allgemein Objekte?
Bei letzterem wäre das Problem nachvollziehbar, da Javascript Objekte (und auch Array ist ein Objekt) nur per Referenz übergibt.
Bei Firefox funktioniert's übrigens ohne Probleme.
D.h., in welchem/-en Browser(n) funktioniert es nicht?
Jedoch ergibt sp_array.length die richtigen Elemente. So was fliegt aber dann wieder, und zwar erst in der alert Zeile...:
for(i=num; i<window.sp_array.length; i++)
{
if(window.sp_array[i])
alert("Länge " + window.sp_array[i].length);
Was ergibt typeof für window.sp_array[i]?
Welche "Inhalte" von window.sp_array[i] bekommst du über eine for-in-Schleife angezeigt?
gruß,
wahsaga
processes[sub]["stitle"] und processes[sub]["stext"] sind also skalare Werte, und nicht etwa selber auch wieder Arrays oder allgemein Objekte?
Bei letzterem wäre das Problem nachvollziehbar, da Javascript Objekte (und auch Array ist ein Objekt) nur per Referenz übergibt.
Aha, das wusste ich nicht. Ja, processes ist ein Objekt (Mehrdim. Array).
Bei Firefox funktioniert's übrigens ohne Probleme.
D.h., in welchem/-en Browser(n) funktioniert es nicht?
Im IE funktioniert's nicht, bei Opera schon. Wichtig wäre eben, dass es im IE klappt.
Was ergibt typeof für window.sp_array[i]?
Welche "Inhalte" von window.sp_array[i] bekommst du über eine for-in-Schleife angezeigt?
Es wird bei alert Ausgaben [object] angezeigt.
Wäre es eine (gute) Lösung, das processes Array auch im opener zu speichern?
MfG, Georg.
hi,
Aha, das wusste ich nicht. Ja, processes ist ein Objekt (Mehrdim. Array).
Wichtig wären die Typen von dem, was übergeben wird:
processes[sub]["stitle"] und processes[sub]["stext"] sind Titel und Text in html Format.
Gut, also Textliterale/Strings, skalare Werte? (Vermutlich ja.)
Im IE funktioniert's nicht, bei Opera schon. Wichtig wäre eben, dass es im IE klappt.
Wenn es wirklich skalare Werte sind, wäre das eindeutig ein Fehler vom IE.
Wäre es eine (gute) Lösung, das processes Array auch im opener zu speichern?
Zumindest als Workaround sollte das funktionieren.
Alternativ Rouvens Vorschlag.
gruß,
wahsaga
Wichtig wären die Typen von dem, was übergeben wird:
processes[sub]["stitle"] und processes[sub]["stext"] sind Titel und Text in html Format.
Gut, also Textliterale/Strings, skalare Werte? (Vermutlich ja.)
Ich lasse mir das Ganze aus einer Datenbank mittels php auslesen und per echo schreib ich es dann beim Aufruf als JS in den Header des PopUp Fensters. Wenn ich mir die source ansehe, sieht's etwa so aus:
var processes = new Array();
p = new Array(5);
p['pid'] = 1;
p['ptitle'] = 'Reinigung eines Glasobjektträgers';
p['spid'] = 1;
p['stitle'] = 'Vorbereitung';
p['stext'] = "Die eigentliche Reinigung erfolgt im <em>Reinraum</em>. Die Objektträger befinden sich im <em>Optiklabor</em>.<br />"+
"<br />"+
"Es wird eine Leuchte mit Weißlicht verwendet, damit die Verunreinigungen besser zu erkennen sind.<br />"+
"<br />"+
"<img width="500" height="354" src="/pdb_tiny/files/Image/reinigung_1.jpg" alt="" />";;
processes.push(p);
Im IE funktioniert's nicht, bei Opera schon. Wichtig wäre eben, dass es im IE klappt.
Wenn es wirklich skalare Werte sind, wäre das eindeutig ein Fehler vom IE.
Wäre es eine (gute) Lösung, das processes Array auch im opener zu speichern?
Zumindest als Workaround sollte das funktionieren.
Alternativ Rouvens Vorschlag.
Ok, werde es mit einer - oder beiden, je nach Erfolg ;) - Lösung(en) beschäftigen.
Danke nochmals!
MfG, Georg.
processes[sub]["stitle"] und processes[sub]["stext"] sind also skalare Werte, und nicht etwa selber auch wieder Arrays oder allgemein Objekte?
Sorry für Doppelpost, hatte ich jetzt vergessen. processes[sub]["stitle"] und processes[sub]["stext"] sind Titel und Text in html Format. Der Sinn ist, dass im PopUp eine Vorschau gezeigt wird und der Titel und Text dann in das öffnende Fenster übernommen werden, wo es dann bearbeitet bzw. verändert werden kann.
Und danke für die Antworten bisher!
MfG, Georg.
Hi,
opener.sp_array[opener.sp_array.length] = new Array(opener.sp_array.length, processes[sub]["stitle"], processes[sub]["stext"]);
was ist denn processes[] - ist das ein Array des PopUp-Fensters? Wenn ja, dann vermute ich dass du gerade auf ein Java(Script)-"Problem" gestoßen bist: Anstelle der Werte werden die Referenzen hinterlegt, d.h. in deinem Array des Openers steht in Wahrheit kein String o.ä. sondern ein Verweis auf den entsprechenden Eintrag des anderen Arrays. Sobald das Popup nun weg ist fehlt auch der entsprechende Wert. Eine Lösung wäre z.B. den Wert herauszulösen, vielleicht mit einem kleine Trick wie
processes[sub]["stitle"]+""
Ich mag mich aber täuschen.
MfG
Rouven