Tim: setzen des "type" für Element "button" im IE

Hallo,

ich hoffe das mir jemand einen Tipp geben kann. Ich erzeuge HTML mit JavaScript, ungefähr so:

var newButton = document.createElement("button");
 newButton.type="submit";

Im IE (zumindest im 7er) bekomme ich den Fehler "Das Objekt unterstützt diese Aktion nicht.". im FF klappt's. Muss ich eine andere Funktion verwenden? Ist es nicht erlaubt den type zu ändern (obwohl ich das Element grad erstelle?)...

Danke, gruß,
Tim

  1. hi,

    var newButton = document.createElement("button");
    newButton.type="submit";

    Im IE (zumindest im 7er) bekomme ich den Fehler "Das Objekt unterstützt diese Aktion nicht.". im FF klappt's. Muss ich eine andere Funktion verwenden? Ist es nicht erlaubt den type zu ändern (obwohl ich das Element grad erstelle?)...

    Der IE unterstützt das dummerweise nicht - dafür aber eine "Alternativ-Syntax" für document.createElement, wenn man ihr als Parameter gleich das komplette HTML des zu erzeugenden Elements übergibt:

    var newButton = document.createElement('<button type="submit" ...></button>');

    Nein, schön ist das natürlich nicht ...

    Und die MSDN lügt bzgl. document.createElement m.E. auch noch dreist - bei Input-Elementen hat man nämlich idR. das gleiche Problem, den type im IE nicht separat setzen zu können, wohingegen die MSDN behauptet:

    "You must perform a second step when you use createElement to create the input element. The createElement method generates an input text box, because that is the default input type property. To insert any other kind of input element, first invoke createElement for input, and then set the type property to the appropriate value in the next line of code."

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. var newButton = document.createElement('<button type="submit" ...></button>');

      Nein, schön ist das natürlich nicht ...

      nicht nur das, es wirft auch einen Fehler in anderen Browsern und muss entsprechend behandlet werden.

      Struppi.

      --
      Javascript ist toll (Perl auch!)
      1. hi,

        Nein, schön ist das natürlich nicht ...

        nicht nur das, es wirft auch einen Fehler in anderen Browsern und muss entsprechend behandlet werden.

        Ja, dass das eine Browserweiche o.ä. erfordert, dachte ich mit meiner Aussage bereits impliziert zu haben :-)

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
    2. Vielen Dank für die schnelle Antwort, das funktioniert soweit, allerdings wirft es einige Fragen auf. Kann ich den type bei bestehenden Elementen verändern sondern muss diese immer ersetzen?

      Außerdem fiel mir noch was auf, was ich komisch finde. Meine Funktion sieht eigentlich so aus (hatte sie für's Forum ein bischen abgekürzt):

      var newImage = document.createElement("img");
       ... Bilder erstellen
       var newText = document.createTextNode("test");

      // if IE...
       var newButton = document.createElement('<button type="submit" class="osbutton"></button>');
       newButton.value="test";
       ...
       newButton.appendChild(newImage);
       newButton.appendChild(newText);

      Und dabei kommt ein Button raus, der die Beschriftung "test<bild>test" hat. Kann es sein, dass IE das "value"-Attribute anders Interpret und als text setzt? Naja, ich werde weiter forschen...

      hi,

      var newButton = document.createElement("button");
      newButton.type="submit";

      Im IE (zumindest im 7er) bekomme ich den Fehler "Das Objekt unterstützt diese Aktion nicht.". im FF klappt's. Muss ich eine andere Funktion verwenden? Ist es nicht erlaubt den type zu ändern (obwohl ich das Element grad erstelle?)...

      Der IE unterstützt das dummerweise nicht - dafür aber eine "Alternativ-Syntax" für document.createElement, wenn man ihr als Parameter gleich das komplette HTML des zu erzeugenden Elements übergibt:

      var newButton = document.createElement('<button type="submit" ...></button>');

      Nein, schön ist das natürlich nicht ...

      Und die MSDN lügt bzgl. document.createElement m.E. auch noch dreist - bei Input-Elementen hat man nämlich idR. das gleiche Problem, den type im IE nicht separat setzen zu können, wohingegen die MSDN behauptet:

      "You must perform a second step when you use createElement to create the input element. The createElement method generates an input text box, because that is the default input type property. To insert any other kind of input element, first invoke createElement for input, and then set the type property to the appropriate value in the next line of code."

      gruß,
      wahsaga

      1. hi,

        Kann es sein, dass IE das "value"-Attribute anders Interpret und als text setzt?

        Ja, <button> ist speziell in Hinsicht auf den Absendewert im IE mehr als problematisch - Aussagen dazu findest du vielfach im Archiv.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
  2. ... vielleicht funktioniert das:

    newButton.setAttribute('type', 'submit');

    Gruß, Josef