sunny: dynamisch gefüllte Formularfelder leeren

Hallo liebes Forum!

Ich hab hier ein Formular mit Textfeldern die bereits Inhalt haben, dieser Inhalt wird per ASP in die Felder geschrieben. Nun möchte ich einen Button erstellen, der bei Klick alle Felder leert, leider funktioniert das aber nicht.

Hier mein Formular:

<form name="formular" method="post" action="verarbeitung_preise.asp">
 ...
  <%do while not objrs.eof
  mitarbeiter = objrs("mitarbeiter")
  euro = objrs("euro")
  id = objrs("id")%>
  <tr>
   <td><%response.write mitarbeiter%></td>
   <td><input name="euro" type="text" value="<%response.write euro%>" size="25" class="form">
    <input name="id" type="hidden" value="<%response.write id%>">
   </td>
  </tr>
  <%objrs.movenext
  loop%>
  <tr>
   <td colspan="2"><input type="submit" name="Submit" value="&Auml;nderungen speichern"> <input type="reset" name="Reset" value="Felder leeren"></td>
  </tr>
 </form>

So funktioniert das aber leider nicht, bei Klick auf den "Felder leeren"-Button tut sich gar nichts, ich bekomme allerdings auch keine Fehlermeldung.

Weiß jemand eine Lösung für das Problem?

Liebe Grüße,
sunny

  1. Hallo,

    reset leert ja auch keine Felder, sondern setzt sie auf den Ursprungswert zurück, welcher im value steht. Um die Felder zu leeren mußt Du entweder die Seite neu laden und die values auf "" setzen oder per DOM z.B. mit getElementsByName die value-Werte auf 0 setzen.

    Viele Grüße,
    Jürgen

    1. Hallo!

      reset leert ja auch keine Felder, sondern setzt sie auf den Ursprungswert zurück, welcher im value steht. Um die Felder zu leeren mußt Du entweder die Seite neu laden und die values auf "" setzen oder per DOM z.B. mit getElementsByName die value-Werte auf 0 setzen.

      Ich habs jetzt so versucht:

      <input type="reset" name="Reset" value="Felder leeren" onClick="Javascript:document.getElementsByName("euro")='';">

      Das geht aber nicht, es fehlt, denk ich mal, die Angabe welches Element angesprochen werden soll. Aber es heißen ja alle Felder "euro" und ich will auch alle Felder, die diesen Namen haben, ansprechen. Kann man mit getElementsByName überhaupt alle Felder ansprechen?

      Oder muss ich das dann doch anders machen?
      (Die Lösung mit dem Neuladen der Seite gefällt mir nicht unbedingt, sorry ;) )

      Liebe Grüße,
      sunny

      1. Hallo!

        reset leert ja auch keine Felder, sondern setzt sie auf den Ursprungswert zurück, welcher im value steht. Um die Felder zu leeren mußt Du entweder die Seite neu laden und die values auf "" setzen oder per DOM z.B. mit getElementsByName die value-Werte auf 0 setzen.

        Ich habs jetzt so versucht:

        <input type="reset" name="Reset" value="Felder leeren" onClick="Javascript:document.getElementsByName("euro")='';">

        Das geht aber nicht, es fehlt, denk ich mal, die Angabe welches Element angesprochen werden soll. Aber es heißen ja alle Felder "euro" und ich will auch alle Felder, die diesen Namen haben, ansprechen. Kann man mit getElementsByName überhaupt alle Felder ansprechen?

        Oder muss ich das dann doch anders machen?
        (Die Lösung mit dem Neuladen der Seite gefällt mir nicht unbedingt, sorry ;) )

        Liebe Grüße,
        sunny

        ich glaube du musst auch auf die Text eigenschaft des feldes zugreifen also ungefähr so:

        document.getElementsByName("euro").nodeValue='';">

        das sollte eigentlich gehen

        mfg
        teal

        1. ich glaube du musst auch auf die Text eigenschaft des feldes zugreifen also ungefähr so:

          document.getElementsByName("euro").nodeValue='';">

          Also das:

          <input type="reset" name="Reset" value="Felder leeren" onClick="Javascript:document.getElementsByName("euro").nodeValue='';">

          geht leider auch nicht :(

          Lg,
          sunny

          1. ich glaube du musst auch auf die Text eigenschaft des feldes zugreifen also ungefähr so:

            document.getElementsByName("euro").nodeValue='';">

            Also das:

            <input type="reset" name="Reset" value="Felder leeren" onClick="Javascript:document.getElementsByName("euro").nodeValue='';">

            geht leider auch nicht :(

            Lg,
            sunny

            und wie stehts mit

            document.getElementsByName("euro").firstChild.nodeValue='';

            und schreib vielleicht mal das Javascript klein also
            statt onClick="Javascript... besset onClick="javascript:

            mfg
            teal

            1. und wie stehts mit

              document.getElementsByName("euro").firstChild.nodeValue='';

              Funktioniert auch nicht.

              und schreib vielleicht mal das Javascript klein also
              statt onClick="Javascript... besser onClick="javascript:

              Eigentlich sollte man "javascript" eh ganz weglassen, wie Jürgen K. bereits bemerkt hat. Aber es funktioniert weder ohne noch groß- noch kleingeschrieben ...

              Lg,
              sunny

        2. Aloha!

          ich glaube du musst auch auf die Text eigenschaft des feldes zugreifen also ungefähr so:

          document.getElementsByName("euro").nodeValue='';">

          Der Zugriff mit "getElementsByName" deutet durch den Namensteil "Elements" schon an, dass als Ergebnis nicht nur ein Element geliefert wird, sondern mehrere - ergo: Ein Array!

          Man kommt nicht umhin, in einer Schleife auf alle Elemente des Arrays zuzugreifen und entsprechende Werte zuzuweisen.

          for (i=0; i<document.getElementsByName("euro").length; i++)
          {
            document.getElementsByName("euro")[i].hiergehtsweiter...
          }

          Ich würde aber aus Kompatibilitätsgründen zu IE 4 und NS 4 die weiterhin gültige Methode über document.forms[].elements[] gehen wollen.

          http://selfhtml.teamone.de/javascript/objekte/elements.htm

          - Sven Rautenberg

          1. Hallo Sven,

            danke, das schaut ja schonmal gut aus!
            Habs jetzt so versucht:

            <script type="text/javascript">
            <!--
            function leeren() {
             for (i=0; i<document.getElementsByName("euro").length; i++)
             {
              document.getElementsByName("euro")[i].value='';
             }
            }
            //-->
            </script>

            Und dann:

            <input type="reset" name="Reset" value="Felder leeren" onClick="leeren();">

            Das geht aber leider auch nicht!? Was hab ich jetzt falschgemacht?

            Ich würde aber aus Kompatibilitätsgründen zu IE 4 und NS 4 die weiterhin gültige Methode über document.forms[].elements[] gehen wollen.

            Es handelt sich um ein kleines Administrationstool, das nur auf einem einzigen Rechner mit IE 6.0 funktionieren muss, das ist also kein Problem.

            Lg,
            sunny

      2. <input type="reset" name="Reset" value="Felder leeren" onClick="Javascript:document.getElementsByName("euro")='';">

        Mit document.getElementsByName("euro")[0] wird das erste Feld angesprochen, mit document.getElementsByName("euro")[1] das zweite usw.
        Leite also onclick auf eine Funktion weiter, die in einer for-Schleife alle Felder auf '' (nicht 0, war Blödsinn vorher von mir!) setzt. Das Javascript: im onclick kannst Du Dir übrigens sparen, onclick ist eh schon JavaScript.

        Viele Grüße,
        Jürgen

        1. Mit document.getElementsByName("euro")[0] wird das erste Feld angesprochen, mit document.getElementsByName("euro")[1] das zweite usw.
          Leite also onclick auf eine Funktion weiter, die in einer for-Schleife alle Felder auf '' (nicht 0, war Blödsinn vorher von mir!) setzt. Das Javascript: im onclick kannst Du Dir übrigens sparen, onclick ist eh schon JavaScript.

          Also irgendwie steh ich jetzt aber auf der Leitung ... wie soll ich hier eine for-Schleife anwenden? Ich weiß ja nicht, wieviele Felder mit dem Namen "euro" es geben wird!?

          Lg,
          sunny

          1. Ich kann zwar jetzt leider kein ASP, aber ich nehme an, es ist von irgendwas abhängig, wie viele euro-Felder es geben wird. Und diese Anzahl (wie immer sie sich errechnet) kann man ja mit übertragen und entsprechend weit die for-Schleife zählen lassen.

            1. Ich kann zwar jetzt leider kein ASP, aber ich nehme an, es ist von irgendwas abhängig, wie viele euro-Felder es geben wird. Und diese Anzahl (wie immer sie sich errechnet) kann man ja mit übertragen und entsprechend weit die for-Schleife zählen lassen.

              Wieviele Felder es geben wird hängt davon ab, wie viele Datensätze in der Datenbank stehen aus der ausgelesen wird!

              Aber ich denke, der Lösungsansatz von Sven Rautenberg müsste funktionieren:

              for (i=0; i<document.getElementsByName("euro").length; i++)
               {
                document.getElementsByName("euro")[i].value='';
               }

              Nur irgendwo muss ich einen Fehler drinhaben, es funktioniert nämlich immer noch nicht (keine Fehlermeldung, aber geleert werden die Felder auch nicht)!?

              Lg,
              sunny

              1. for (i=0; i<document.getElementsByName("euro").length; i++)
                {

                Mach hier dazwischen mal ein alert rein und laß Dir den Wert von i bzw. von document.getElementsByName("euro")[i].value ausgeben, vielleicht sieht man so, wo der Fehler ist. (Hoffentlich sinds nicht zu viele Felder, sonst gibts ein Alert-Terror.)

                document.getElementsByName("euro")[i].value='';
                }

                1. for (i=0; i<document.getElementsByName("euro").length; i++)
                  {

                  Mach hier dazwischen mal ein alert rein und laß Dir den Wert von i bzw. von document.getElementsByName("euro")[i].value ausgeben, vielleicht sieht man so, wo der Fehler ist. (Hoffentlich sinds nicht zu viele Felder, sonst gibts ein Alert-Terror.)

                  document.getElementsByName("euro")[i].value='';
                  }

                  Jetzt wirds lustig:

                  Alle Alerts (sowohl für i als auch für docment.get...) sind korrekt. Sobald ich beim ersten Alert auf OK klicke ist das Feld[0] leer, beim Klick auf das OK vom zweiten Alert leert sich auch das Feld[1] usw. bis schließlich alle Felder leer sind und ich das letzte Alert bestätigen muss. Danach sind alle Felder wieder voll!?!?

                  Ach - jetzt bin ich grad während des Schreibens draufgekommen, ich hab das return false; vergessen! Jetzt funktionierts!

                  Danke für Eure schnellen und hilfreichen Antworten!

                  Lg,
                  sunny

  2. Hallo liebes Forum!

    Ich hab hier ein Formular mit Textfeldern die bereits Inhalt haben, dieser Inhalt wird per ASP in die Felder geschrieben. Nun möchte ich einen Button erstellen, der bei Klick alle Felder leert, leider funktioniert das aber nicht.

    Hier mein Formular:

    <form name="formular" method="post" action="verarbeitung_preise.asp">
    ...
      <%do while not objrs.eof
      mitarbeiter = objrs("mitarbeiter")
      euro = objrs("euro")
      id = objrs("id")%>
      <tr>
       <td><%response.write mitarbeiter%></td>
       <td><input name="euro" type="text" value="<%response.write euro%>" size="25" class="form">
        <input name="id" type="hidden" value="<%response.write id%>">
       </td>
      </tr>
      <%objrs.movenext
      loop%>
      <tr>
       <td colspan="2"><input type="submit" name="Submit" value="&Auml;nderungen speichern"> <input type="reset" name="Reset" value="Felder leeren"></td>
      </tr>
    </form>

    So funktioniert das aber leider nicht, bei Klick auf den "Felder leeren"-Button tut sich gar nichts, ich bekomme allerdings auch keine Fehlermeldung.

    Weiß jemand eine Lösung für das Problem?

    Liebe Grüße,
    sunny

    der witz daran ist das der löschen knopf eigentloch gar nicht löscht sondern nur den originalzustand herstellt. Das macht der indem er den Inhalt im value="" Bereich ausliest und ihn wieder in das Textfeld hineinschreibt. Um das Problem zu lösen müsstest du also das Skript erneut aufrufen, dabei aber den Value Wert nicht schreiben lassen (mithilfe einer if-schleife und variablen) zum Beispiel.

    if(set=="false") then <input value="">
    else <input value=text>

    beim aufrufen musst du nur die variable set mitschicken also seite.asp?set=false

    und schon sollte alles gelöscht sein.

    mfg
    teal