ritschmanhard: automatischer formular submit schlägt fehl

Hi!

Ich habe folgendes Problem, bei dem ich leider etwas hänge:
Ich habe eine Hauptseite der Gestalt:
``
<html>
<head><title>egal</title></head>
<body>
<iframe src="wichtig.xml" name="wichtig"></iframe>
</body>
</html>
[/code]

wichtig.xml:

  
<?xml version="1.0" encoding="ISO-8859-1"?>  
<?xml-stylesheet type="text/xsl" href="wichtig.xsl"?>  
<document>  
<data></data>  
<init></init>  
</document>  

wichtig.xsl:

  
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">  
<xsl:template match="/">  
<html>  
 <head>  
  <script type="text/javascript">  
   function init()  
   {  
    document.forms.wForm.someVal.value="fooBar";  
    document.forms.wForm.target="wichtig";  
    document.forms.wForm.submit();  
   }  
  </script>  
 </head>  
 <body style="text-align:center; margin:0; padding:0;background-color:#cccccc;">  
   <xsl:apply-templates/>  
 </body>  
</html>  
</xsl:template>  
  
<xsl:template match="data">  
 <form method="post" name="wForm" id="wForm" action="/cgi-bin/my.cgi" target="wForm">  
  <input type="hidden" name="someVal" value=""/>  
 </form>  
</xsl:template>  
  
<xsl:template match="init">  
 <input type="button" value="load settings" style="margin:1%" onclick="init()" />  
 <script type="text/javascript">  
  init();  
 </script>  
</xsl:template>  
  
</xsl:stylesheet>  

Ergebnis der Transformation im Iframe:

  
<head>  
  <script type="text/javascript">  
   function init()  
   {  
    document.forms.wForm.someVal="fooBar";  
    document.forms.wForm.target="wichtig";  
    document.forms.wForm.submit();  
   }  
  </script>  
 </head>  
 <body style="text-align:center; margin:0; padding:0;background-color:#cccccc;">  
  <form method="post" name="wForm" id="wForm" action="/cgi-bin/my.cgi" target="wForm">  
  <input type="hidden" name="someVal" value=""/>  
 </form>  
 <input type="button" value="load settings" onclick="init()" />  
 <script type="text/javascript">  
  init(); //(*)  
 </script>  
 </body>  
</html>  

Wenn ich auf "load settings" drücke, wird das Formular übertragen.
Aber mit dem init();//(*) erfolgt leider keine automatische Übertragung. Alle aufgerufenen Adressen sind im gleichen Adressbereich.
Warum wird init() nicht ausgeführt?
Auch wenn ich (*) durch window.setTimeout("init()",1000) ersetze, wird init() nicht übertragen.
FF Fehlerkonsole meldet: nichts
Apache Error log meldet: nichts
Testausgabe (in file) im CGI meldet: sich nicht, es sei denn der Aufruf erfolgt mittels des "load settings".

Ich bin echt für jeden Tip dankbar,
Richard

  1. Mahlzeit ritschmanhard,

    [code lang=html]
      <script type="text/javascript">
       function init()
       {
        document.forms.wForm.someVal="fooBar";
        document.forms.wForm.target="wichtig";
        document.forms.wForm.submit();
       }
      </script>
      <form method="post" name="wForm" id="wForm" action="/cgi-bin/my.cgi" target="wForm">
      <input type="hidden" name="someVal" value=""/>
    </form>
    <input type="button" value="load settings" onclick="init()" />

    Wieso liegt dieser Knopf außerhalb des Formulars?

    Wenn ich auf "load settings" drücke, wird das Formular übertragen.
    Aber mit dem init();//(*) erfolgt leider keine automatische Übertragung.

    Natürlich nicht. Du solltest Dir den <http://de.selfhtml.org/javascript/objekte/forms.htm@title=Formularzugriff per Javascript> (nochmals) zu Gemüte führen ... ich sehe in Deinem Code kein Element mit dem Namen oder der ID "forms".

    FF Fehlerkonsole meldet: nichts

    Glaube ich irgendwie nicht. Normalerweise zeigt die Fehlerkonsole im Firefox IMMER an, wenn auf nicht existierende Elemente zugegriffen wird.

    MfG,
    EKKi

    --
    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
    1. Hallo,

      document.forms.wForm.someVal="fooBar";

      Du solltest Dir den <http://de.selfhtml.org/javascript/objekte/forms.htm@title=Formularzugriff per Javascript> (nochmals) zu Gemüte führen

      Selber! ;)

      ... ich sehe in Deinem Code kein Element mit dem Namen oder der ID "forms".

      Wat? Hat doch auch niemand behauptet.
      »Mit dem Objekt forms, das in der JavaScript-Objekthierarchie unterhalb des document-Objekts liegt, haben Sie Zugriff auf Formulare, die in einer HTML-Datei definiert sind.« (ebd.)

      Mathias

      1. Mahlzeit molily,

        document.forms.wForm.someVal="fooBar";

        Du solltest Dir den <http://de.selfhtml.org/javascript/objekte/forms.htm@title=Formularzugriff per Javascript> (nochmals) zu Gemüte führen

        Selber! ;)

        Hm? Hmja, OK ... man kann in der Tat auch per document.forms.name_des_formulars auf ein bestimmtes Formular zugreifen - sollte es aber IMHO nicht ... dass der Browser aber ein Irgendwas mit dem Namen oder der ID "someVal" findet, dass ein Unterobjekt des auf diese Art angesprochenen Formulars sein soll, ist dann wieder reine Glückssache.

        Was spricht gegen eine "vernünftigen Zugriff"™ lt. <http://de.selfhtml.org/javascript/objekte/elements.htm@title=Schema 4>?

        MfG,
        EKKi

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
        1. Hallo,

          dass der Browser aber ein Irgendwas mit dem Namen oder der ID "someVal" findet, dass ein Unterobjekt des auf diese Art angesprochenen Formulars sein soll, ist dann wieder reine Glückssache.

          Nein, das ist einfach in JavaScript 1.1 (IIRC, vielleicht auch schon 1.0) so festgelegt.
          Wenn du einen Browser findest, der ECMAScript und DOM Core, HTML, Events usw. implementiert, aber nicht diesen Teil von JavaScript, werde ich dir gerne im Punkt der »reinen Glückssache« zustimmen.
          Es kann natürlich sein, dass das form-Elementobjekt aus irgendwelchen anderen Gründen einen gleichnamigen Member hat, das stimmt. Einen beliebigen Feldnamen kann man nur wählen, wenn man über elements geht.

          Was spricht gegen eine "vernünftigen Zugriff"™ lt. <http://de.selfhtml.org/javascript/objekte/elements.htm@title=Schema 4>?

          Schema 3 ist sinnvoller. Man schreibt ja auch nicht window["document"]["forms"].

          Mathias

          1. das ist einfach in JavaScript 1.1 (IIRC, vielleicht auch schon 1.0) so festgelegt.

            Es war doch JavaScript 1.0 (1, 2: »You can reference a form's elements in your code by using the element's name (from the NAME attribute) or the elements array.«)

    2. Hi, EKKi!

      Erstmal Danke für die Antwort.
      Aber liege ich mit meiner Konstruktion nicht genau in Schema 3?
      <http://de.selfhtml.org/javascript/objekte/forms.htm@title=Formularzugriff per Javascript>

      FF Fehlerkonsole meldet: nichts
      Glaube ich irgendwie nicht. Normalerweise zeigt die Fehlerkonsole im Firefox IMMER an, wenn auf nicht existierende Elemente zugegriffen wird.

      Is aber so - warum sollt ich lügen ;-)

      Grüße,
      Richard

      1. Mahlzeit ritschmanhard,

        Erstmal Danke für die Antwort.
        Aber liege ich mit meiner Konstruktion nicht genau in Schema 3?
        <http://de.selfhtml.org/javascript/objekte/forms.htm@title=Formularzugriff per Javascript>

        Ja, tust Du. Dass es funktioniert (oder auch nicht), ist aber reine Glückssache, da der jeweilige Browser lustig interpretieren kann. Verwende stattdessen lieber <http://de.selfhtml.org/javascript/objekte/elements.htm@title=Schema 4> - da kannst Du dann ggf. auch problemlos Variablen einsetzen o.ä. ...

        MfG,
        EKKi

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
  2. Hallo,

    Aber mit dem init();//(*) erfolgt leider keine automatische Übertragung.

    Dein Code funktioniert bei mir prächtig. Firefox 3.

    Warum wird init() nicht ausgeführt?

    Keine Ahnung, ich kann den Fehler nicht nachvollziehen. Ich empfehle eine energetische Reinigung und eine Abschirmung gegen Erdstrahlen.

    Mathias

    1. Hi Mathias,

      Ich empfehle (...) eine Abschirmung gegen Erdstrahlen.

      Das widerspricht doch ganz klar der Barrierefreiheit, wenn nur Leute mit Abschirmung die Seite richtig sehen ;-)

      Über die energetische Reinigung werde ich mal nachdenken *G*.
      Ich verwende FF 2.0.0.16 unter Linux.

      Grüße,
      Richard

    2. Hi Mathias!

      Ich konnte das Problem lösen - und die Leute im Forum hatten dazu keine Chance. Warum?
      Ich hatte "verschwiegen" (weil ich dachte, css hat nur auf die Darstellung eines Elements Auswirkung...), dass der iframe zunächst auf style="visibility:hidden" gesetzt ist, und erst nach dem Ausführen von init auf visible gesetzt wird.
      Das scheint den Fehler zu verursachen: anscheinend führt der FF kein javascript in "non-displayed" frames aus.

      Trotzdem vielen Dank,
      Richard

      1. (...) zunächst auf style="visibility:hidden" gesetzt ist,

        Wollte sagen auf style="display:none", sorry.

        Grüße,
        Richard

  3. Hallo,

    Wenn ich auf "load settings" drücke, wird das Formular übertragen.
    Aber mit dem init();//(*) erfolgt leider keine automatische Übertragung. Alle aufgerufenen Adressen sind im gleichen Adressbereich.
    Warum wird init() nicht ausgeführt?
    Auch wenn ich (*) durch window.setTimeout("init()",1000) ersetze, wird init() nicht übertragen.

    ich erinner mich mal das gleiche/selbe problem gehabt zu haben und glaube es seinerzeit - per trial&error - gelöst zu haben, indem ich den .submit() aufruf in einer variable gespeichert habe (var sub = document.forms.younameit.submit()). dass das problem seinerzeit im ff2 auftrat und unter ff3 nicht mehr, spricht evtl. für diese "lösung". wie und warum das so war/ist kann ich nicht sagen und biete diese information deshalb nur ohne gewähr an.

    gruß,

    pD

    1. ich sehe ein: ich bin doof, nehme alles zurück was ich gesagt habe und behaupte das gegenteil.
      ich gelobe: das nächste mal lese ich ein thema ausführlich und antworte nur wenn das problem noch besteht.

      beschämt,

      pD