schildi: form - js-zugriff auf input type image element

hallo!
stehe total auf dem schlauch!

<form name="test">
<input type="image" name="testinput" src="pussy" />
</form>

<script language="javascript" type="text/javascript">

alert(document.forms.test.testinput);

</script>

wieso ist das ergebnis undefined??

vielen dank für jede hilfe!

  1. Hallo schildi!

    <form name="test">
    <input type="image" name="testinput" src="pussy" />
    </form>

    <script language="javascript" type="text/javascript">

    alert(document.forms.test.testinput);

    </script>

    Entweder referenzierst Du auf document.forms[x].testinput oder auf document.test.testinput.

    Dein Code ist zumindest für Deine Ansprüche nicht richtig. Dein Code kann nur auf Eigenschaften, oder Methoden des Form Tags zugreifen.

    Schönen Gruß

    Afra

    1. Entweder referenzierst Du auf document.forms[x].testinput oder auf document.test.testinput.

      Dein Code ist zumindest für Deine Ansprüche nicht richtig. Dein Code kann nur auf Eigenschaften, oder Methoden des Form Tags zugreifen.

      hab ich nur hier falsch geschrieben versehentlich:

      <form name="test">
      <input type="image" name="testinput" src="pussy" />
      </form>

      <script language="javascript" type="text/javascript">
      alert(document.test.testinput);
      alert(document.forms['test'].testinput);
      </script>

      nichts davon geht. immer undefined. nehme ich allerdings ein type="input" oder type="text", geht es ??

      1. Hallo,

        <form name="test">
        <input type="image" name="testinput" src="pussy" />
        </form>

        <script language="javascript" type="text/javascript">
        alert(document.test.testinput);
        alert(document.forms['test'].testinput);
        </script>

        nichts davon geht. immer undefined. nehme ich allerdings ein type="input" oder type="text", geht es ??

        Ja, das ist wohl so. Ein INPUT.type="image" ist in keinem Browser in der HTMLCollection elements zu finden. Ich würde darin einen Fehler der Browser-DOM-Implementation sehen.

        Allerdings braucht man Deine komplizierte Funktion nun auch wieder nicht:

          
        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"  
                "http://www.w3.org/TR/html4/strict.dtd">  
        <html>  
        <head>  
        <title>Titel</title>  
        <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">  
        </head>  
        <body>  
          
        <form action="#" name="test">  
        <p><input type="text" name="t1" value="Test" size="10" maxlength="10"></p>  
        <p><input type="submit" name="ok" value="OK"></p>  
        <p><input type="image" name="testinput" src="pussy" alt="Katze" title=""></p>  
        </form>  
          
        <script type="text/javascript">  
        for (var i=0; i<document.forms["test"].elements.length; i++)  
         document.write(document.forms["test"].elements[i].type + " " +document.forms["test"].elements[i].name + "<br>")  
          
        //ein INPUT.type="image" ist in keinem Browser in der HTMLCollection elements zu finden:  
        alert(document.forms["test"].elements["testinput"]);  
          
        //aber so kann man es erreichen:  
        alert(document.forms["test"].getElementsByTagName("INPUT")["testinput"].name);  
        </script>  
          
        </body>  
        </html>  
        
        

        viele Grüße

        Axel

  2. hallo nochmal.

    also es scheint wirklich definitiv nicht möglich zu sein auf ein <input type="image" ... element zuzugreifen per "normaler" javascript schreibweise. warum weiss ich nicht.

    lediglich per dom ist es möglich.

    hier ein beispiel:

    <form name="test">
    <input type="image" name="testinput" src="pussy" />
    </form>

    <script language="javascript" type="text/javascript">

    f = document.forms['test'];
    alert(f.childNodes[1].nodeName);

    a = f.childNodes[1].attributes;
    for(i in a)
     alert(i +"="+ a[i].nodeValue );

    </script>

    1. NACHTRAG.

      also ich habe mich entschlossen eine kleine funktion zu schreiben, mit der man sich das <input type="image" ... objekt eines formulars holen kann.

      diese will ich euch nicht vorenthalten:

      <form name="test">
      <input type="image" style="border:0px;" name="testinput" src="bild.gif" />
      </form>

        
      <script language="javascript" type="text/javascript">  
        
      function getImageSubmitButton(/*String*/ formName)  
      {  
       var f = document.forms[formName];  
       var c = f.childNodes;  
       var imageInputElement = null;  
        
       for(var i1 in c)  
       {  
        if(c[i1].nodeName == "INPUT")  
        {  
         var a = c[i1].attributes;  
         for(var i2 in a)  
         {  
          var n = a[i2].name;  
          var av = a[i2].nodeValue;  
          if(n == "type" && av == "image")  
          {  
           //image input element gefunden  
           imageInputElement = c[i1];  
          }  
         }  
        }  
       }  
      return imageInputElement;  
      }  
        
      b = getImageSubmitButton('test');  
      b.style.border = '1px solid #000000';  
      alert(b.name);  
        
      </script>  
      
      
      1. hi,

        also ich habe mich entschlossen eine kleine funktion zu schreiben, mit der man sich das <input type="image" ... objekt eines formulars holen kann.

        Wieso "das"?
        Es können doch durchaus mehrere sein.

        function getImageSubmitButton(/*String*/ formName)

        Warum übergibst du nicht gleich die Referenz auf das Formularobjekt?

        for(var i1 in c)
        [...]
             //image input element gefunden
             imageInputElement = c[i1];

        Wenn du wirklich nur das erste vorkommende haben willst - dann kannst du hier gleich mit return die Funktion verlassen, die Schleife noch weiter laufen zu lassen, ist ja unnötig.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Warum übergibst du nicht gleich die Referenz auf das Formularobjekt?

          weil es oftmals geschickter ist, wenn man schlicht und einfach einen string übergeben kann.

          for(var i1 in c)
          [...]
               //image input element gefunden
               imageInputElement = c[i1];

          Wenn du wirklich nur das erste vorkommende haben willst - dann kannst du hier gleich mit return die Funktion verlassen, die Schleife noch weiter laufen zu lassen, ist ja unnötig.

          na du erbsenzähler ;).
          aber klar, du hast recht. wobei ich stattdessen ein break und einen return am ende für eine sauberere lösung halte.

          auf jeden fall danke fürs feedback.

          grüße lars

          1. aso. der verbesserte code:

              
            function getImageSubmitButton(/*String*/ formName)  
            {  
             var f = document.forms[formName];  
             var c = f.childNodes;  
             var imageInputElement = null;  
             search:  
             for(var i1 in c)  
             {  
              if(c[i1].nodeName == "INPUT")  
              {  
               var a = c[i1].attributes;  
               for(var i2 in a)  
               {  
                var n = a[i2].name;  
                var av = a[i2].nodeValue;  
                if(n == "type" && av == "image")  
                {  
                 //image input element gefunden  
                 imageInputElement = c[i1];  
                 break search;  
                }  
               }  
              }  
             }  
             return imageInputElement;  
            }  
            
            
          2. hi,

            Warum übergibst du nicht gleich die Referenz auf das Formularobjekt?

            weil es oftmals geschickter ist, wenn man schlicht und einfach einen string übergeben kann.

            Das sehe ich eher genau andersherum.

            Wenn du mit Javascript ausführlichere Manipulationen am Dokumentenbaum vornimmst, dürftest du idR. bei vernünftigem Vorgehen Referenzen auf deine Elemente bereits vorliegen haben.
            Den Namen noch zusätzlich mitschleppen zu müssen, dürfte fast immer zusätzlicher Aufwand sein.

            gruß,
            wahsaga

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