Twilo: form.submit() funktioniert nur in opera

Hallo,

warum wird das folgende Formular nur bei Opera abgesendet?

function getState(url, selection){  
  var form = document.createElement('form');  
  var input = document.createElement('input');  
  form.method = 'get';  
  form.action = url;  
  input.type = 'hidden';  
  input.name = 'selection';  
  input.value = selection;  
  form.appendChild(input);  
  form.submit();  
}

Firefox 2.x und der Internet Explorer senden das Formular nicht ab.
Firebug und die Fehlerkonsole zeigen keinen Fehler an.

Die Funktion wird mit ein Klick auf ein a-Element per onclick aufgerufen.

mfg
Twilo

  1. Hallo Twilo,

    Schuß ins blaube; vll muss das Formular auch ins Dokument gehangen werden?

    Mit freundlichem Gruß
    Micha

    1. Hallo,

      Schuß ins blaube; vll muss das Formular auch ins Dokument gehangen werden?

      die Funktion sieht jetzt wie folgt aus

      function getState(url, selection){  
        var form = document.createElement('form');  
        var input = document.createElement('input');  
        form.method = 'get';  
        form.action = url;  
        input.type = 'hidden';  
        input.name = 'selection';  
        input.value = selection;  
        form.appendChild(input);  
        document.appendChild(form);  
        form.submit();  
      }
      

      jetzt verschickt Opera und der Internet Explorer 7 das Formular.

      beim Firefox 2.0 erhalte ichz folgende Fehlermeldung im Firefug

      Node cannot be inserted at the specified point in the hierarchy" code: "3

      versucht der Firefox das Element nach </html> einzufügen?

      mfg
      Twilo

      1. Hallo Twilo,

        versucht der Firefox das Element nach </html> einzufügen?

        Das sagt Dir der Auswahlquelltext im Fox. Markiere mit Strg+A das Dokument und wähle es im Kontextmenü. Ich hätte es ggf. mit

        document.getElementsByTagName("body")[0].appendChild(form);

        versucht.

        Mit freundlichem Gruß
        Micha

      2. Hallo,

        document.appendChild(form);

        Der document-Knoten hat nur ein Kindknoten, nämlich das Dokument-Element namens html. Weitere Knoten kannst du ihm nicht anhängen. Benutze wie gesagt das body-Element, das geht am einfachsten über document.body.

        Mathias

  2. Hallo,

    danke euch beiden - Firefox sendet das Formular jetzt ab :-)

    mfg
    Twilo

  3. Moin!

    Warum machst du es dir so kompliziert?

    function getState(url, selection){

    var form = document.createElement('form');
      var input = document.createElement('input');
      form.method = 'get';
      form.action = url;
      input.type = 'hidden';
      input.name = 'selection';
      input.value = selection;
      form.appendChild(input);
      form.submit();
    }

      
    Du hast einen GET-Request mit nur einem einzigen Parameter auf eine URL.  
      
    Simple Lösung für dieses Problem:  
      
    ~~~javascript
    function getState(url,selection){  
      location.href=url + "?selection=" + encodeURIComponent(selection);  
    }
    

    Das ist simpel, leicht verstehbar, wegen des Verzichts auf DOM-Operationen vermutlich auch deutlich performanter, und funktioniert mutmaßlich in deutlich mehr Browsern, als du jetzt getestet hast.

    Die Funktion wird mit ein Klick auf ein a-Element per onclick aufgerufen.

    Das böte durchaus noch ein paar weitere Ansätze für unobtrusive Scripting, man könnte onclick die URL des Links (mit einer Parametervorbelegung, die dem Ziel Abwesenheit von Javascript signalisiert) mit den passenden Daten versorgen.

    - Sven Rautenberg

    --
    "Love your nation - respect the others."
    1. Hallo,

      Du hast einen GET-Request mit nur einem einzigen Parameter auf eine URL.

      Simple Lösung für dieses Problem:

      function getState(url,selection){

      location.href=url + "?selection=" + encodeURIComponent(selection);
      }

        
      warum einfach, wenn es auch kompliziert geht ;-)  
        
      ich frag mich, warum ich darauf nicht selber gekommen bin...  
        
        
      mfg  
      Twilo  
      
      -- 
      [Farbtabelle](http://www.farb-tabelle.de)