molily: Re: javascript... Daten von einem Formular zum anderen schicken

Beitrag lesen

Hallo zusammen,

Gerade antwortete ich auf t=37702&m=206358, als während des Schreibens meiner Antwort das Posting im Archiv verschwand (nun ist es im Zwischenreich).

Die Frage stammte von: Andreas (mannemer31@hotmail.com), vielleicht bekomme ich ihn dazu, diesen Thread zu finden.

---

Hallo, Andreas,

ich habe folgendes (wahrscheinlich) primitives Problem: ich öffne aus einem Formular heraus (nennen wir es "XYZ" mit einer Textarea "TEXT") eine neues Fenster ("ABC")

Dein Formular im Fenster heißt übrigens auch »ABC«.

welches ebenfalls ein Formular enthält.

Es sollte eine vollständiges HTML-Dokument enthalten, du schreibst aber nur einen Haufen Elemente ins Fenster. open() http://selfhtml.teamone.de/javascript/objekte/document.htm#open und close() http://selfhtml.teamone.de/javascript/objekte/document.htm#close fehlen auch.

Wie bekomme ich die dort angegebenen Werte per Knopfdruck ins vorherige Formular ("XYZ") ins Feld "TEXT" zurück?

Du hast zwei verschiedene Dokumente (in JavaScript: window-Objekte) mit damit verschiedene Namensräume für Objekte, Funktionen und Variablen (eigentlich sind es alles Objekte). Wie du auf das window-Objekt und Unterobjekte des Popup-Fensters zugreifst, ist die anscheinend schon geläufig. Nun versuchst du aber im Fenster auf eine Funktion zuzugreifen, welche nicht etwa in diesem Dokument deklariert wurde, sondern im Ursprungsdokument.

Über »opener« kannst du auf der window-Objekt des Fensters/Dokuments zugreifen, aus welchem das Popup-Fenster geöffnet wurde, siehe http://selfhtml.teamone.de/javascript/objekte/window.htm#allgemeines und http://aktuell.de.selfhtml.org/tippstricks/javascript/fensterzugriff/.

Bei meinem Code meckert der Browser bei Knopfdruck nur: "Objekt erwartet!"

Klar - in dem Popup-Fenster gibt es keine Funktion namens pasteImageTag, höchstens im opener-Fenster.
Wenn du Netscape oder Mozilla und deren JavaScript-Konsole verwenden würdest, wären die Fehlermeldungen übrigens aussagekräftiger.

function pasteImageTag()
{
var ergebnis = document.ABC.def.value;
XYZ.TEXT.pasteHTML("<!IMAGE(DEF=" + ergebnis + ")!>");
}

pasteHTML ist mit Sicherheit Microsoft JScript, was das bewirkt, weiß ich nicht.

Angenommen, du deklarierst die Funktion nach wie vor im Ursprungsfensterdokument, dann könntest du aus dieser Funktion über win.document.ABC auf das Formular des Popup-Fensters zugreifen, sofern du die Fensterreferenz weiterhin in einer Variable namens win speicherst.

var win=window.open("", "ABC", "width=300px,height=150px");

Der dritte Funktionsparameter ist Murks, die Einheiten »px« sind unnötig, siehe http://selfhtml.teamone.de/javascript/objekte/window.htm#open.

Einen anderen Fensternamen (zweiter Parameter) würde ich wie gesagt auch wählen.

win.document.focus();
var def="";
win.document.write("<form name='ABC' method='post'>");
win.document.write("<table width=100%><tr>");
win.document.write("<td>Definition:</td><td><input type='text' name='def'></td></tr>");
win.document.write("<tr><td></td><td><input type='button' value='OK' onClick='pasteImageTag()'></td></tr></table></form>");

Wie gesagt, schreibe bitte ein komplettes Dokument ins Fenster (wieso löst du es überhaupt dynamisch mit JavaScript, ich sehe nichts Variables).

Angenommen, du willst auf die Funktion pasteImageTag im Ursprungsfenster zugreifen, sollte opener.pasteImageTag() diese adressieren.

Ich habs auch schon versucht mit ..."onClick='this.pasteImageTag()'"... dann bekomm ich die Meldung "Das Objekt unterstützt die Eigenschaft oder Methode nicht!"

Mit this zielst du auf das Element ab, welches den Event gefeuert hat, folglich das input-Element. Du meintest wahrscheinlich self, aber da die Funktion in diesem Fenster/Dokument nicht deklariert ist, würde das auch nichts bringen.

Grüße,
Mathias