Rückruffunktion oder auf Eingabe warten
Sebastian Fiedlschuster
- javascript
hallo,
ich versuche, ein Popup-Fenster zu öffnen, in dem der Benutzer einige Angaben in ein Formular eintragen soll und dann bestätigen soll. Danach soll das Fenster geschlossen werden.
Der Aufruf des Popups erfolgt von einer Funktion aus, die als Rückgabewert einen bestimmten Eintrag aus dem Formular haben soll.
function abfrage_fenster()
{
var win = null;
win = window.open("abfrage.php", "tools");
// Hier warten, bis der Benutzer das Formular abgeschickt hat.
var text = win.formular.textfeld.value;
win.close();
return text;
}
Ich weiß nicht, wie ich das Warten realisieren kann, ohne eine While-Schleife zu verwenden. Diese würde nämlich die CPU-Auslastung in die Höhe treiben.
Als Alternative könnte ich mir noch vorstellen, dass ich den Popup eine Funktion mitteile, die es nach dem Absenden des Formulars aufrufen soll.
function abfrage_fenster()
{
var win = null;
win = window.open("abfrage.php", "tools");
// Dem Popup irgendwie mitteilen, welche Funktion es aufrufen soll, wenn das Formular versandt wird, nämlich "auswerten(text)".
}
function auswerten(text)
{
// Hier wird dann irgendwas mit dem Text gemacht.
}
Hat vielleicht jemand eine Idee?
Viele Grüße
Sebastian
hallo,
ich versuche, ein Popup-Fenster zu öffnen, in dem der Benutzer einige Angaben in ein Formular eintragen soll und dann bestätigen soll. Danach soll das Fenster geschlossen werden.
So etwas kann ich auch gebrauchen. In einer Liste wird eine Adresse zum Ändern angeklickt, die vollzogene Änderung könnte gleich in der Zeile aktualisiert werden, ohne die Seite neu zu laden.
Kann das Fenster bei Klick auf Submit nicht eine Funktion im Parent- Fenster aufrufen uns als Parameter ein Array der neuen Werte übergeben?
Dann müssten die neuen Werte natürlich noch zur Datenbank geschickt werden und das Fenster schliesst sich. Wäre eine geile Lösung, allerdings nur mit aktiviertem Javascript machbar.
Na gut, die Zaghaften dürfen dann eben nicht ändern.
Kalle
Hallo,
ich versuche, ein Popup-Fenster zu öffnen, in dem der Benutzer einige Angaben in ein Formular eintragen soll und dann bestätigen soll. Danach soll das Fenster geschlossen werden.
Wahrscheinlich willst du genau das nicht hören, aber solche Mehrfensteranwendungen mit Popups sind einfach aus der Mode, und zwar zurecht.
Heutzutage besteht keine Notwendigkeit mehr, neue Fenster zu öffnen, um Daten über ein Formular zu erheben und dann wieder zurückzukehren zur JavaScript-Anwendung im Ursprungsfenster. Das konnte man schon immer sequentiell machen (ohne mehrere gleichzeitig offene Fenster über mehrere Dokumente) oder schon seit mehreren Jahren innerhalb eines Dokumentes über das DOM.
Über das DOM kannst du gegebenenfalls ein Zusatzformular einblenden, das beim Absenden wieder verschwindet. Für solche sogenannte modale Fenster, die dokumentintern dargestellt werden, gibt es mittlerweile dutzende Fertigscripte. Fensterübergreifende JavaScript-Datenübergabe würde ich mir da echt nicht antun.
Ich weiß nicht, wie ich das Warten realisieren kann
Asynchron und eventgesteuert, wie alles in JavaScript. »Warten« gibt es nicht, nur die Zeit zwischen Ereignissen und der Ausführung der entsprechenden Event-Handler.
Man kann versuchen, mit JavaScript eine Logik aufzubauen »beim Schließen des Fensters lese das Formular im Dokument im Fenster aus und speichere den Wert als Variable unter dem window-Objekt des Ursprungsfensters«. Beispielsweise:
[codel ang=html]<script type="text/javascript">
function open_window () {
var new_win = window.open("2.html", "zweitfenster");
new_win.onunload = function () {
window.variable = new_win.document.forms[0].elements[0].value;
document.getElementById("ausgabe").innerHTML = window.variable;
};
}
</script>
<p><a href="javascript:open_window();">Fenster öffnen</a></p>
<p id="ausgabe">Ausgabe</p>[/code]
Das wird aber vermutlich nicht sehr zuverlässig sein, gerade mal Firefox macht das auf Anhieb.
Besser du haust unter das Formular im Popup ein einfachen Button mit onclick="opener.variable = this.form.feld.value; window.close();". Also du kopierst vom Popup-Fenster aus die Formulardaten über opener ins Ursprungsfenster. Hingegen aus Sicht der Ursprungsseite eine solche Logik zu bauen, ist ziemlich schwierig.
Mathias