Dennis M.: Formularfelder hinzufügen

Hallo zusammen,

ich habe folgendes Problem. Ich möchte Textfelder in ein Formular hinzufügen. Funktioniert auch, jedoch übergibt der Browser den Inhalt dieses Textfeldes nicht.

<script type="text/javascript">
 function manuell_date() {
  if(document.call.next_call.selectedIndex==0) {
   document.call.getElementById('next_call').innerHTML = '<input size="10" value="<? echo date('d.m.Y'); ?>" type="text" name="next_call">';
  }
 }
</script>

Jemand eine Idee?

Gruss
Dennis

  1. hi,

    Ich möchte Textfelder in ein Formular hinzufügen. Funktioniert auch, jedoch übergibt der Browser den Inhalt dieses Textfeldes nicht.

    Ist "der Browser" der IE - oder auch andere?

    Der IE macht immer wieder mal Probleme mit den Namen dynamisch hinzugefügter Formularfelder.

    gruß,
    wahsaga

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

      Ich möchte Textfelder in ein Formular hinzufügen. Funktioniert auch, jedoch übergibt der Browser den Inhalt dieses Textfeldes nicht.

      Ist "der Browser" der IE - oder auch andere?

      Der IE macht immer wieder mal Probleme mit den Namen dynamisch hinzugefügter Formularfelder.

      gruß,
      wahsaga

      Der IE macht das und sendet das Feld auch. Mozilla wiederum nicht...?!

      Hab schon im DOM geguckt, irgendwie ordnet er das Feld nicht dem Formular zu ?! Und nun tüftel ich, wie ich ihm das sagen kann... :(

    2. hi,

      Ich möchte Textfelder in ein Formular hinzufügen. Funktioniert auch, jedoch übergibt der Browser den Inhalt dieses Textfeldes nicht.

      Ist "der Browser" der IE - oder auch andere?

      Der IE macht immer wieder mal Probleme mit den Namen dynamisch hinzugefügter Formularfelder.

      gruß,
      wahsaga

      Und noch etwas ist komisch. Wenn ich nen Testalert mache, ergibt folgendes im IE = 7 und im Moz = 0:

      alert(document.getElementsByTagName('form')[0].getElementsByTagName('input').length);

  2. if(document.call.next_call.selectedIndex==0) {
       document.call.getElementById('next_call').innerHTML = '<input size="10" value="<? echo date('d.m.Y'); ?>" type="text" name="next_call">';

    Kann es sein, dass du versuchst in ein select Element HTML Code einzufügen?
    Das ist natürlich Unsinn.

    Du musst ein Element nehmen das auch HTML enthalten darf das innerhalb des Formulares ist.

    Struppi.

    1. if(document.call.next_call.selectedIndex==0) {
         document.call.getElementById('next_call').innerHTML = '<input size="10" value="<? echo date('d.m.Y'); ?>" type="text" name="next_call">';

      Kann es sein, dass du versuchst in ein select Element HTML Code einzufügen?
      Das ist natürlich Unsinn.

      Du musst ein Element nehmen das auch HTML enthalten darf das innerhalb des Formulares ist.

      Struppi.

      Nein, getElementById('next_call') ist ein <span id="call_next"></span> wo ein <select> drin ist, wenn welches eine bestimmte Option gewählt ist ausgetauscht werden soll, mit einem Textfeld.

      Bis hier bin ich nun:

      if(document.call.next_call.selectedIndex==0) {
         inp = document.createElement("input");
         inp.style.width = "120px";
         inp.setAttribute("type","text",true);
          inp.setAttribute("name","next_call",true);
          inp.setAttribute("value","<? echo date('d.m.Y'); ?>",true);
          pos = document.getElementById('next_call');
          pos.replaceChild(inp,document.call.next_call);

      }

      1. Bis hier bin ich nun:

        Ohne Fehlermeldung oder HTML Code kann man nichts damit anfangen. Ich hab das mal nach deiner Beschreibung umgesetzt und es funktioniert bei mir einwandfrei.

        Struppi.

        1. Hallo Struppi!

          Also, Fehlermeldung muss ich Dir zusammen reimen. Neu hinzugefügtes Textfeld <input name=next_call> wird vom IE erkannt. Mozilla jedoch ignoriert dieses Feld einfach und sendet es nicht weiter an send.php (POST) [GET überings auch nicht]

          <body>
          <form method=POST action=send.php name=call>
          <input type=hidden name=id value=1>
          <script type=text/javascript>
            function man_sel()  {
              if(document.call.next_call.selectedIndex==0) {
                inp = document.createElement("input");
                inp.style.width = "120px";
                inp.setAttribute("type","text",true);
                inp.setAttribute("name","next_call",true);
                inp.setAttribute("value","<? echo date('d.m.Y'); ?>",true);
                pos = document.getElementById('next_call');
                pos.replaceChild(inp,document.call.next_call);
              }
            }
          </script>
          <span id=next_call>
            <select name=next_call>
              <option>Anderes Datum eingeben</option>
              <option>01.01.1970</option>
              [...]
            </select>
          </span>
          <input type=submit value=Senden>
          </form>
          </body>

          So ungefähr sieht das original aus, etwas mehr Felder noch, aber das ist eben die Problemzone, die ich hier schnell nochmal eingetippt habe.

          Gruss
          Dennis

          1. Sorry, war nen kleiner Fehler beim <select>, nämlich onchange und selected fehlte :-)

            <body>
            <form method=POST action=send.php name=call>
            <input type=hidden name=id value=1>
            <script type=text/javascript>
              function man_sel()  {
                if(document.call.next_call.selectedIndex==0) {
                  inp = document.createElement("input");
                  inp.style.width = "120px";
                  inp.setAttribute("type","text",true);
                  inp.setAttribute("name","next_call",true);
                  inp.setAttribute("value","<? echo date('d.m.Y'); ?>",true);
                  pos = document.getElementById('next_call');
                  pos.replaceChild(inp,document.call.next_call);
                }
              }
            </script>
            <span id=next_call>
              <select name=next_call onchange=man_sel()>
                <option>Anderes Datum eingeben</option>
                <option selected>01.01.1970</option>
                [...]
              </select>
            </span>
            <input type=submit value=Senden>
            </form>
            </body>

          2. So ungefähr sieht das original aus, etwas mehr Felder noch, aber das ist eben die Problemzone, die ich hier schnell nochmal eingetippt habe.

            Auch das funktioniert bei mir, im IE 6, ebenso im FF 2

            Struppi.

      2. Hi,

        if(document.call.next_call.selectedIndex==0) {

        Demnach gibt es in dem Formular mit name-Attributwert "call" ein select-Element mit name-Attributwert "next_call".

        (die name-Attributwerte ergeben sich aus document.call.next_call, daß es ein select-Element ist aus selectedIndex).

        document.call.getElementById('next_call')

        Hier versuchst Du, ein Element mit der id-Attributwert "next_call" anzusprechen.

        Du hast also ein Element mit dem id-Attributwert "next_call" und ein Element mit dem name-Attributwert "next_call".

        Laut

        getElementById('next_call') ist ein <span id="call_next"></span>

        ist das ein anderes Element als das select-Element.

        Zumindest im IE dürfte das ein Problem geben, da der bei getElementById auch auf name-Attributwerte guckt - die Eindeutigkeit der ID ist damit gefährdet.

        Außerdem: getElementById ist m.W. nur für document definiert, nicht für node. document.call.getElementById("next_call") müßte m.E. deshalb ein "no such function" o.ä. als Fehler melden.

        wo ein <select> drin ist, wenn welches eine bestimmte Option gewählt ist ausgetauscht werden soll, mit einem Textfeld.

        inp.setAttribute("name","next_call",true);

        Nachträgliches Setzen des name-Attributs mag der IE gar nicht: http://msdn2.microsoft.com/en-us/library/ms534184.aspx

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        O o ostern ...
        Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
        1. Hi,

          if(document.call.next_call.selectedIndex==0) {

          Demnach gibt es in dem Formular mit name-Attributwert "call" ein select-Element mit name-Attributwert "next_call".

          (die name-Attributwerte ergeben sich aus document.call.next_call, daß es ein select-Element ist aus selectedIndex).

          document.call.getElementById('next_call')

          Hier versuchst Du, ein Element mit der id-Attributwert "next_call" anzusprechen.

          Du hast also ein Element mit dem id-Attributwert "next_call" und ein Element mit dem name-Attributwert "next_call".

          Laut

          getElementById('next_call') ist ein <span id="call_next"></span>
          ist das ein anderes Element als das select-Element.

          Zumindest im IE dürfte das ein Problem geben, da der bei getElementById auch auf name-Attributwerte guckt - die Eindeutigkeit der ID ist damit gefährdet.

          Außerdem: getElementById ist m.W. nur für document definiert, nicht für node. document.call.getElementById("next_call") müßte m.E. deshalb ein "no such function" o.ä. als Fehler melden.

          wo ein <select> drin ist, wenn welches eine bestimmte Option gewählt ist ausgetauscht werden soll, mit einem Textfeld.

          inp.setAttribute("name","next_call",true);

          Nachträgliches Setzen des name-Attributs mag der IE gar nicht: http://msdn2.microsoft.com/en-us/library/ms534184.aspx

          cu,
          Andreas

          Hallo, Andreas. Erstmal vielen Dank für Deine antwort.

          Das ersetzen von <select> durch ein <input type=text> Objekt funktioniert mittlerweile im IE, sowie in Mozilla. Der IE übergibt beim senden dieses Formulars (form: call) alle benötigten Felder auch das neue Feld an die nächste Seite.
          Der Mozilla jedoch, ignoriert dieses neue Feld einfach, laut dem DOM Inspector, weisst Mozilla das Formular nicht dem Feld zu, oder umgekehrt. Da im DOM Inspector des <input name=call_next> unter <form> = (NULL) steht.

          Man ist das kompliziert zu erklären, hoffe es ist begreiflich so...?!

          1. Das ersetzen von <select> durch ein <input type=text> Objekt funktioniert mittlerweile im IE, sowie in Mozilla. Der IE übergibt beim senden dieses Formulars (form: call) alle benötigten Felder auch das neue Feld an die nächste Seite.
            Der Mozilla jedoch, ignoriert dieses neue Feld einfach, laut dem DOM Inspector, weisst Mozilla das Formular nicht dem Feld zu, oder umgekehrt. Da im DOM Inspector des <input name=call_next> unter <form> = (NULL) steht.

            Kann ich ebenfalls nicht nachvollziehen, es werden alle Felder gesendet.

            Struppi.