Hilfe: Objekt lokal erkannt, auf dem Server nicht
mattfi
- javascript
Hallo Forumsteilnehmer,
aus einer Datei x.htm heraus möchte ich den Eingabewert eines Formulars an ein weiteres, nicht im Frameset liegendes Fenster ("report") einer weiteren Datei ("mapping_report.htm") weitergeben, u.zw. dort an ein weiteres Formularfeld ("Mapping.ProdArea"):
function passText(str) {
report = window.open("mapping_report.htm", "report", "width=500,height=320,scrollbars=yes");
window.report.Mapping.ProdArea.value = str;
}
Wenn ich das Ganze lokal (Dateisystem, nicht localhost) ausführe, funktionierte es, wenn ich die Dateien auf den Server hochlade und das Skript dort ausführe, kriege ich die Fehlermeldung: "window.report.Mapping.ProdArea.value ist kein Objekt".
Kann mir bitte jemand sagen, warum, bzw. helfen, wie ich es besser machen kann?
Matthias
Hi,
Wenn ich das Ganze lokal (Dateisystem, nicht localhost) ausführe, funktionierte es,
da kannst Du mal sehen, wie schnell Dein Filesystem ist. HTTP-Roundtrips brauchen ungleich länger.
Cheatah
Hallo Cheatah,
das verstehe ich nicht:
da kannst Du mal sehen, wie schnell Dein Filesystem ist. HTTP-Roundtrips brauchen ungleich länger.
Ich kriege ja nicht irgendein timeout, sondern eine Handfeste Fehlermeldung "[Zielformularfeld] nicht als Objekt erkannt."
Matthias
Hi,
da kannst Du mal sehen, wie schnell Dein Filesystem ist. HTTP-Roundtrips brauchen ungleich länger.
Ich kriege ja nicht irgendein timeout, sondern eine Handfeste Fehlermeldung "[Zielformularfeld] nicht als Objekt erkannt."
ja, denn in dem Moment, in dem Du fragst, existiert das Objekt nicht, weil noch nicht mal das Dokument da ist. Warte ein paar Jahre.
Cheatah
Aha:
Ich kriege ja nicht irgendein timeout, sondern eine Handfeste Fehlermeldung "[Zielformularfeld] nicht als Objekt erkannt."
ja, denn in dem Moment, in dem Du fragst, existiert das Objekt nicht, weil noch nicht mal das Dokument da ist. Warte ein paar Jahre.
Quod facere? Welche Alternativlösung kann ich anwenden, um dieses Problem zu umgehen?
Matthias
Hallo Matthias,
Quod facere? Welche Alternativlösung kann ich anwenden, um dieses Problem zu umgehen?
Du könntest z.B. den String per URL übergeben und im mapping_report.htm onLoad dem Formularfeld zuweisen.
function passText(str) {
report = window.open("mapping_report.htm?str=" + str, "report", "width=500,height=320,scrollbars=yes");
}
Grüße
Andreas
Ich kann nicht aus dem Zieldokument heraus Informationen anfordern, da muss eine andere Lösung her, aber welche?
Wie gesagt, die Formulareingabe erfolgt in n Dateien, alle Formulardaten werden nacheinander in das eine Zieldokument mapping_report.htm transferiert.
Axels Lösung führt zum Ansprechen von Formulardaten aus dem Ausgangsdokument n+1, das noch gar nicht geöffnet (geschweige denn ausgefüllt) ist; Andis Lösung führt zum Überschreiben der URL-Parameterinformation durch Formulardatei n+1.
Muss ich mich eventuell von der Formulardatei verabschieden, alles in ein Cookie schreiben und am Ende den ganzen Summs auf einen Rutsch in das Zieldokument mapping_report.htm schreiben?
Aber: Ich selber bin gegenüber Cookies skeptisch eingestellt, ich mag es nicht, wenn andere Leute uneingeladen bei mir in die Wohnung drängen, sich einen Wein aus dem Kühlschrank holen und diesen in meinem Wohnzimmer genießen; dasselbe gilt für meinen Rechner. Ich denke, manch anderer hat ein ebensolches "Reviergefühl" und daher eventuell Cookies deaktiviert. Ich würde in meiner Programmierung lieber ohne Cookies auskommen.
Hallo Matthias,
Wie gesagt, die Formulareingabe erfolgt in n Dateien, alle Formulardaten werden nacheinander in das eine Zieldokument mapping_report.htm transferiert.
Nur zum Vertändnis:
Du möchtest
1. aus einem Dokument ein Popup öffnen
2. einem Formularfeld im Popupfenster aus dem Hauptdokument heraus einen Wert zuweisen
3. im Hauptfenster ein weiteres Dokument öffnen, ohne dass das Popup geschlossen wird
4. aus diesem Dokument heraus einen weiteren Wert an das Popup schicken
5. die Punkte 3 und 4 mehrfach wiederholen.
Verstehe ich Dich da jetzt richtig?
Grüße
Andreas
Hallo Andreas,
- einem Formularfeld im Popupfenster aus dem Hauptdokument heraus einen Wert zuweisen
Einem Formularfeld in einem Frame im Popupfenster...
(Ich schau es mir auch gerade an ;-))
http://www.nexus-solutions.de/info.htm <-- Was man nicht alles den Leuten abnimmt ;-)
@Matthias:
Schau mal hier: http://aktuell.de.selfhtml.org/tippstricks/javascript/fensterzugriff/index.htm
gruesse
rainer groth
Hallo Rainer
Schau mal hier: http://aktuell.de.selfhtml.org/tippstricks/javascript/fensterzugriff/index.htm
Danke für den Link, die Erklärung ist prima gemacht (=idiotensicher).
Ich programmiere javaScript zwar erst seit ca. drei Tagen, aber der Inhalt der Demo war mir begrifflich bekannt, weil ich von einem im Internet verfügbaren Skript ausging (das die Daten über parent.xxx überträgt).
Da ich mich inzwischen dazu entschlossen habe, ein neues Frameset zu generieren, wird von dieser Adresse inzwischen das Frameset aufgerufen. (Ich habe noch Problkeme mit dem Frameset, aber bis morgen dürfte es laufen.)
<-- Was man nicht alles den Leuten abnimmt ;-)
Bitte nimm es mir nicht böse, aber ich habe heute ein paar sehr, sehr ruppige Antworten in diesem Forum gelesen (nicht unbedingt nur auf meine eigenen Mails beschränkt, nein, bis auf ein, zwei Ausnahmen eher nicht). Ich kenne Foren/Listen, in denen es ähnlich zugeht, ich kenne aber auch solche, in denen noch nie ja, genau: frequency="0" jemand öffentlich gemaßregelt oder bloßgestellt wurde, nur weil er ein Anfänger und, so zu sagen, was das Fachgebiet anbelangt, ein "kleiner Dummkopf" ist. Ich empfehle die Liste von www.frame-user.de als megahöfliches und -zuvorkommendes Beispiel einer Mailingliste ;-)
Natürlich bin ich weiterhin für jede Art der Hilfe äußerst dankbar...
Gruß,
Matthias
Hallo mattfi,
http://www.nexus-solutions.de/info.htm
...(Ich habe noch Problkeme mit dem Frameset, aber bis morgen dürfte es laufen.)
Das mit den Problemen stimmt leider :-(
Meine Vorschlaege:
1. Verwende HTML 4.01;
2. Korrigiere UNBEDINGT den Tipp-Fehler in Deiner "mapping.htm" (Zeile 37);
3. Validiere UNBEDINGT Deine HTML-Dateien, um diverse (Verschachtelungs-) Fehler zu korrigieren - besonders Deine "mapping_00.htm" und "mapping_report.htm" muessen noch einmal ueberarbeitet werden ;-)
Und dann schauen wir weiter...
gruesse
rainer groth
Hey,
der Tipp war Gold wert um 00:05! Danke.
- Korrigiere UNBEDINGT den Tipp-Fehler in Deiner "mapping.htm" (Zeile 37);
Welche Vorteile bringt es?
Welche Nachteile evtl., ich meine browserverbreitungsmäßig?
- Verwende HTML 4.01;
Das ist eine Aufgabe für einen neuen Tag...
- Validiere UNBEDINGT Deine HTML-Dateien, um diverse (Verschachtelungs-) Fehler zu korrigieren - besonders Deine "mapping_00.htm" und "mapping_report.htm" muessen noch einmal ueberarbeitet werden ;-)
Jup, danke. Und 1 gute Nacht.
Und dann schauen wir weiter...
Matthias
Hallo Matthias,
- Verwende HTML 4.01;
Welche Vorteile bringt es?
Welche Nachteile evtl., ich meine browserverbreitungsmäßig?
Schau mal hier: http://selfhtml.teamone.de/intro/technologien/html.htm#versionen (Kleine Ergaenzung von mir: Nach der Veroeffentlichung von HTML 4.0 gab es eine 'Rueckrufaktion' und es wurde 'auf HTML 4.01 nachgeruestet').
Und schau auch mal hier: http://selfhtml.teamone.de/html/allgemein/grundgeruest.htm#dokumenttyp - kurz: der gewaehlte Dokumenttyp entscheidet darueber, welcher Parser den Quelltext wie interpretiert (SEHR wichtig beim Einsatz von CSS).
gruesse
rainer groth
- Verwende HTML 4.01;
- Korrigiere UNBEDINGT den Tipp-Fehler in Deiner "mapping.htm"
- Validiere UNBEDINGT Deine HTML-Dateien
Melde Vollzug...
Und dann schauen wir weiter...
Uhh, achja, da war doch mein eigentliches Problem, nämlich dass mein JavaScriptchen nicht so lief wie ich es wollte...!
Aaaaalso: FÜr jede Hilfe bin ich dankbar.
<!-- Hoffe dieses Posting liest noch eine(r), nachdem es so weit nach unten gerutscht ist... -->
Matthias
- Verwende HTML 4.01;
- Korrigiere UNBEDINGT den Tipp-Fehler in Deiner "mapping.htm"
- Validiere UNBEDINGT Deine HTML-Dateien
Melde Vollzug...
Brav ;-)
Bleiben also nur noch:
in Deiner 'mapping.htm' die Platzierung des 'noframes'-Bereiches mit einem BITTE sinnvolleren Inhalt;
in Deiner 'mapping_start.htm' in Zeile 86 und Zeile 94 die fehlenden '>';
in Deiner 'mapping_report.htm' in Zeile 20 das fehlende '>'.
gruesse
rainer groth
Danke, Rainer.
Und _das_ lässt der Parser durchgehen?!
in Deiner 'mapping_start.htm' in Zeile 86 und Zeile 94 die fehlenden '>';
in Deiner 'mapping_report.htm' in Zeile 20 das fehlende '>'.
Das ist jetzt ehrlich gemeint: Wieso ist der Inhalt schlecht?
Welchen besseren schlägst du vor?
in Deiner 'mapping.htm' die Platzierung des 'noframes'-Bereiches mit einem BITTE sinnvolleren Inhalt;
Matthias
Hallo Matthias,
Und _das_ lässt der Parser durchgehen?!
Genauer: der HTML-Parser eines/mehrerer Browser handelt im Sinne von 'vorauseilendem Gehorsam' - und mit viel Glueck wird das dargestellt, was Du Dir vorgestellt hast (schau mal hier: http://selfhtml.teamone.de/html/allgemein/textauszeichnung.htm#html_parser, wobei wir erst vor kurzem den JavaScript-Parser des Netscape 6.x bei bedenklichen Interpretationen erwischt haben - "nobody's perfect !").
in Deiner 'mapping.htm' die Platzierung des 'noframes'-Bereiches mit einem BITTE sinnvolleren Inhalt;
Das ist jetzt ehrlich gemeint: Wieso ist der Inhalt schlecht?
Welchen besseren schlägst du vor?
Zum Inhalt:
Ein lapidarer Hinweis auf einen MSIE 6-Download ist IMHO nicht die prallste Idee, denn vielleicht hat User etwas gegen MS-Produkte, oder kann/darf nichts installieren.
Also waeren Links zu einer frame-losen Version Deiner Site hilfreicher/user-freundlicher.
Zur Position im Quelltext (MEINE Meinung):
1. Der HTML-Parser ignoriert Tags, die er nicht kennt (der Goettin sei dank !);
2. Ein nicht-frame-fahiger Parser wird bei Deinem Quelltext also (vereinfacht) folgendes lesen:
"<HTML>
<HEAD></HEAD>
</HTML>"
weil ein Parser, der 'frameset' etc. nicht kennt, IMO auch 'noframes' nicht kennt ;-)
Aber auch wenn er es kennt, liest er doch folgendes:
"<HTML>
<HEAD></HEAD>
<NOFRAMES></NOFRAMES>
</HTML>"
und sollte (so er etwas HTML-Grundverstaendnis aus dem HTML-Kindergarten mitbringt) etwas ins Schleudern kommen, weil er gelernt hat, dass die Inhalte, die er in seinem Darstellungsbereich darstellen soll, in 'body'-Tags eingeschlossen sind ;-)
Deshalb MEIN Vorschlag:
"<HTML>
<HEAD></HEAD>
<FRAMSET></FRAMESET>
<NOFRAMES>
<BODY></BODY>
</NOFRAMES>
</HTML>"
Und ja, ich weiss, dass es unter http://selfhtml.teamone.de/html/frames/definieren.htm#noframes anders erklaert ist ;-).
gruesse
rainer groth
Hallo Rainer,
- Verwende HTML 4.01;
- Korrigiere UNBEDINGT den Tipp-Fehler in Deiner "mapping.htm"
- Validiere UNBEDINGT Deine HTML-Dateien
[...]
Und dann schauen wir weiter...
Soo. Das Zeitproblem ist gelöst: Innerhalb eines Framesets tritt es nämlich nicht auf; es tritt nur auf von einem Fenster x zu einem zweiten, nicht framegebundenen.
Ich selber habe dazu gelernt: Für statische Seiten genügt wohlgeformtes HTML, für OO-programmierte muss der Objektbaum eben stimmen. Ergo: parsen.
Moral: Es sind halt immer mal wieder die kleinen Dummheiten, auf die hinabzusehen es sich nicht lohnt, die den Blick auf die Lösung versperren können... :-)
Jetzt habe ich eigentlich erst einmal nur noch ein (klitzekleines) Problemchen, nämlich dass beim Abarbeiten des ersten Formulars, in dem inzwischen Firmendaten vorab erfasst werden, zwar irgendetwas in die Report-Datei übertragen wird, in die entsprechenden Felder aber der Wert "undefined" geschrieben wird.
Noch einmal der Link: www.nexus-solutions.de/Mapping/mapping.htm.
Vorsicht: Das ganze funktioniert nur bis einschließlich dem Abarbeiten des Formulars "Produktbereich"; "Dokumentart" ist noch nicht bearbeitet.
Hilfe wird gerne angenommen.
Hallo mattfi,
es freut mich, dass Du Anregungen aufnimmst (ehrlich !).
Jetzt habe ich eigentlich erst einmal nur noch ein (klitzekleines) Problemchen, nämlich dass beim Abarbeiten des ersten Formulars, in dem inzwischen Firmendaten vorab erfasst werden, zwar irgendetwas in die Report-Datei übertragen wird, in die entsprechenden Felder aber der Wert "undefined" geschrieben wird.
Ursache in Deiner 'mapping_start.htm':
function processForm() {
var item_text1 = document.Items.Company.text;
var item_text2 = document.Items.eMail.text;
passText(item_text1,item_text2);
window.open("mapping_00.htm", target="mapping_form");
}
Meine Vorschlaege:
1. Mache Dir klar, dass Variablen, die INNERHALB von Anweisungsbloecken mit dem Schluesselwort 'var' deklariert werden, LOKALE sind - schau mal hier: http://selfhtml.teamone.de/javascript/sprache/variablen.htm#definieren.
2. 'text' ist KEINE Eigenschaft eines Formularelementes - schau mal hier: http://selfhtml.teamone.de/javascript/objekte/elements.htm#value.
3. Das Fensteroeffnen wolltest Du doch lassen, oder ?
Deshalb:
function processForm() {
item_text1 = document.Items.Company.value;
item_text2 = document.Items.eMail.value;
passText(item_text1,item_text2);
}
gruesse
rainer groth
Hallo Rainer
-- wieso sollte ich nicht? Du bist doch hier der Fachmann, nicht ich!
es freut mich, dass Du Anregungen aufnimmst (ehrlich !).
Danke für deine freundliche Hilfe (= deine mir geschenkte Zeit + Aufmerksamkeit + Wissen). Gott vergelt's.
Ursache in Deiner 'mapping_start.htm':
- Mache Dir klar, dass Variablen, die INNERHALB von Anweisungsbloecken mit dem Schluesselwort 'var' deklariert werden, LOKALE sind
- 'text' ist KEINE Eigenschaft eines Formularelementes
Und wie soll ich dann das nächste Formularblatt einblenden?
- Das Fensteroeffnen wolltest Du doch lassen, oder ?
Gruß,
Matthias
Hallo Matthias,
es freut mich, dass Du Anregungen aufnimmst (ehrlich !).
-- wieso sollte ich nicht? Du bist doch hier der Fachmann, nicht ich!
:-)
Sicher sollten Fragende in diesem Forum Anregungen aufnehmen - passiert nur leider nicht immer :-(
Danke für deine freundliche Hilfe (= deine mir geschenkte Zeit + Aufmerksamkeit + Wissen). Gott vergelt's.
Kein Problem, dafuer bin ich (wie viele Andere) in diesem Forum.
- Das Fensteroeffnen wolltest Du doch lassen, oder ?
Und wie soll ich dann das nächste Formularblatt einblenden?
Halt im Frame ! SCNR
Falls noch Probleme auftauchen:
Poste bitte weiter in DIESEM Thread, solange er noch in der Hauptdatei ist (ja, ich weiss, dass DU die </faq/> kennst).
gruesse
rainer groth
Hallo Andreas
Nur zum Vertändnis:
Du möchtest
- aus einem Dokument ein Popup öffnen
- einem Formularfeld im Popupfenster aus dem Hauptdokument heraus einen Wert zuweisen
- im Hauptfenster ein weiteres Dokument öffnen, ohne dass das Popup geschlossen wird
- aus diesem Dokument heraus einen weiteren Wert an das Popup schicken
- die Punkte 3 und 4 mehrfach wiederholen.
Exakt. Weil ich aber mehr als den halben Tag auf der Suche nach einer Lösung verbracht habe, habe ich mich inzwischen dafür entschieden, alles in einem neuen Frameset ablaufen zu lassen.
Ich denke im Frameset besteht das Zeitproblem nicht mehr, oder?
Matthias
ja, denn in dem Moment, in dem Du fragst, existiert das Objekt nicht, weil noch nicht mal das Dokument da ist. Warte ein paar Jahre.
Ich hab's nochmals ausprobiert:
Versuch 1: Fehlschlag, da Zieldokument erst in der Ladephase
Versuch 2: auch Fehlschlag, obwohl Zieldokument inzwischen geladen
Liegt es also wirklich daran?
Matthias