thomasp: JavaScript generiertes Formular auslesen

Hallo!

Habe mir mit JavaScript ein Forumlar erstellt.
Mein Problem ist, dass ich die Felder des Formulars mit dem Internet Exlporer (ich benutze 7.0) nicht über deren Namen auslesen kann. Mit Firefox funktioniert es.
Hier ist ein kurzes Beispiel.

function createForm()
{
  var form = document.createElement("form");
  form.name = "fomular";

var inputDomain = document.createElement("input");
  inputDomain.setAttribute("type","text");
  inputDomain.name="feld1";
  inputDomain.setAttribute("autocomplete","off");
  inputDomain.setAttribute("maxlength","20");

var button = document.createElement("input");
  button.setAttribute("type","button");
  button.onclick = onBtnValue;
  button.setAttribute("value","Wert des Feldes");

form.appendChild(inputDomain);
  form.appendChild(button);

document.body.appendChild(form);
  document.forms[0].elements[0].focus();

}
function onBtnValue()
{
 alert(document.fomular.feld1.value);
}

Bei laden des html rufe ich die Methode createForm() auf, die die Elemente in die Seite hängt.
Dann setze ich den Focus über den "schmutzigen" Formularzugriff. Das funktioniert in beiden Browsern. Klicke ich auf den Button soll der Wert des Feldes über den Formularname/Feldnamen als Alertbox ausgegeben werden. Das funktioniert NICHT im IE.
Bitte keine Fragen warum ich das Formular nicht dirket in HTML schreibe. Ich habe meine Gründe ;-).

Gruß
Tom

  1. hi,

    Mein Problem ist, dass ich die Felder des Formulars mit dem Internet Exlporer (ich benutze 7.0) nicht über deren Namen auslesen kann. Mit Firefox funktioniert es.

    Bekanntes Problem des IE - er fügt dynamisch generierte Formularfelder nicht so in die entsprechenden NodeLists ein, wie "statische".

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Bekanntes Problem des IE - er fügt dynamisch generierte Formularfelder nicht so in die entsprechenden NodeLists ein, wie "statische".

      danke!

  2. hallo,

    function onBtnValue()
    {
    alert(document.fomular.feld1.value);

    // versuche es mal mit diesem Aufruf:
    alert("Form-Name:"
      +"\nper Name: "+document.forms["fomular"].name
      +"\nper Index: "++document.forms[0].name);

    alert(document.forms[0].elements[0].value)

    }

    Ein IE-Problem: dynamisch erzeugte Forms lassen sich nicht mit Namen aufrufen, über den Index gehts (hoffe ich mal)

    Gruß planB

    1. hallo,

      function onBtnValue()
      {
      alert(document.fomular.feld1.value);

      // versuche es mal mit diesem Aufruf:
      alert("Form-Name:"
        +"\nper Name: "+document.forms["fomular"].name
        +"\nper Index: "++document.forms[0].name);

      document.forms["formular"].name funktioniert auch nicht im IE.
      Im IE kann ich nur über den Index zugreifen.
      Das wollte ich eigentlich vermeiden, aber wenns nicht anders geht...

      Gruß
      Tom

      1. hallo Tom,

        alert("Form-Name:"
          +"\nper Name: "+document.forms["fomular"].name
          +"\nper Index: "+document.forms[0].name);

        ^^^^^^ mal korrigiert

        document.forms["formular"].name funktioniert auch nicht im IE.
        Im IE kann ich nur über den Index zugreifen.
        Das wollte ich eigentlich vermeiden, aber wenns nicht anders geht.

        das wollte ich mit dem Beispiel zeigen.

        um doch noch Formulare und deren Elemente mit Namen ansprechen zu können, habe ich mir Funktionen gebaut, z.B.:

          
        function findItemByName(feld,suchname) {  
         var item = feld[suchname];  
         for (var i=0; !item && i<feld.length; i++)  
            if (feld[i].name == suchname ) item = feld[i];  
         return item;  
         }  
          
        function getFrm(name) {  
         return findItemByName(document.forms,name);  
         }  
        
        

        für die Elemente entsprechend ...

        Gruß planB

        1. um doch noch Formulare und deren Elemente mit Namen ansprechen zu können, habe ich mir Funktionen gebaut, z.B.:

          function findItemByName(feld,suchname) {
          var item = feld[suchname];
          for (var i=0; !item && i<feld.length; i++)
              if (feld[i].name == suchname ) item = feld[i];
          return item;
          }

          function getFrm(name) {
          return findItemByName(document.forms,name);
          }

          
          >   
          > für die Elemente entsprechend ...  
          >   
          > Gruß planB  
          >   
          >   
          
          Habs kapiert!! ;-)  
          Danke!  
            
          Gruß Tom
          
  3. Hi,

    Das funktioniert NICHT im IE.

    Der IE unterstützt zusätzlich auch eine proprietäre Nutzung von createElement(): createElement('<input name="name">');

    Mache mittels Conditional Compilation eine Weiche: IE obige Syntax, Rest der Welt die richtige Syntax.

    Gruß, Cybaer

    --
    Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
    1. hallo Cybaer,

      Der IE unterstützt zusätzlich auch eine proprietäre Nutzung von createElement(): createElement('<input name="name">');

      wüsste jetzt nicht, wozu diese Konstruktion notwendig ist. Bisher kam ich ohne sie aus.

      var elem=document.createElement("input");
      elem.name="name";

      Gruß planB

      1. Hi,

        wüsste jetzt nicht, wozu diese Konstruktion notwendig ist. Bisher kam ich ohne sie aus.

        var elem=document.createElement("input");
        elem.name="name";

        Hmm, bist Du der gleiche "planB", der im Parallelposting etwas über IE-Fehler zu berichten wußte, und für den Namens-Zugriff noch extra einen Ersatz programmiert hat?

        Wenn ja, dann solltest Du doch selber rückschließen können, wofür diese Konstruktion notwendig ist, oder? Sie ermöglicht die einfache Erzeugung und Benutzung von Form-Elementen ohne "Ersatzfunktionen". =;-)

        Gruß, Cybaer

        --
        Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
        1. hallo,

          Wenn ja, dann solltest Du doch selber rückschließen können ...

          danke, dann hab' ich's nun auch kapiert :)

          und nochmal nachgelesen: MS createElement

          Gruß planB

      2. hi,

        Der IE unterstützt zusätzlich auch eine proprietäre Nutzung von createElement(): createElement('<input name="name">');

        wüsste jetzt nicht, wozu diese Konstruktion notwendig ist.

        Schon mal probiert, einem dynamisch generierten Input-Feld im IE einen anderen Typ als den Default text zu verpassen?

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. hallo,

          Schon mal probiert, einem dynamisch generierten Input-Feld im IE einen anderen Typ als den Default text zu verpassen?

          du denkst an "reset" ?  ja, da steht auch was zu drin: MS createElement

          danke
          Gruß planB

          1. hi,

            Schon mal probiert, einem dynamisch generierten Input-Feld im IE einen anderen Typ als den Default text zu verpassen?

            du denkst an "reset" ?

            Oder auch an "hidden", "image", "radio", "checkbox", "file" ...

            gruß,
            wahsaga

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