Maddy: onChange reagiert nicht

Hi,

ich schreibe eine Java-Anwendung, die per Servlet über den Browser mit dem Anwender kommunizieren soll. Dazu gehört unter anderem auch eine recht umfangreiche Eingabemaske, die nachher eine Datenbank füttern soll.
Diese Maske enthält zwei Felder, die zusammenhängen und zwar die Mitarbeiternummer und den Namen des Mitarbeiters. Gewollt ist jetzt, dass der Benutzer die Nummer einträgt und der Name dann automatisch eingetragen wird (zur Kontrolle). Die Verbindung aus Nummer und Namen steht in der Datenbank. Das Formular muss sich also die fehlenden Daten vom Server holen.
Ich hab es mit onChange in dem Tag des Textfeldes versucht, welches die Nummer bekommt. Leider rührt sich da überhaupt nichts :(

Hier mal der relevante Code dafür, wie er an den Browser geschickt wird:
(Start ist Start.java, das verarbeitende Servlet)
(ma_name soll vor der Rückkehr vom Server per value="irgendwas aus der DB" gesetzt werden)

<form action="Start" method="post" name="Eingabe">
  <tr height="40">
    <td height="40"><label>MA Nr. *</label></td>
    <td height="40"><input type="text" name="ma_nr" size="24" onchange="document.Eingabe.submit();"></td>
  </tr>
  <tr height="40">
    <td height="40"><label>MA Name</label></td>
    <td height="40"><input type="text" name="ma_name" value="wird automatisch eingetragen" disabled="disabled" size="24" /></td>
  </tr>
  <input type="submit" name="submit" value="Senden" />
</form>

Wenn ich das Formular mit dem Submit-Button absende, funktioniert es, aber das onChange lässt mich komplett im Stich. Ich hab schon 20 verschiedene Schreibweisen probiert, mit und ohne Strichpunkt, mir und ohne Klammern, in unterschiedlicher Syntax... nix :(

Hat jemand einen guten Rat für mich? Ich bin am Ende meiner Weisheit.

Liebe Grüsse und eine gute Nacht
Maddy

  1. Hi Maddy

    Ich bin zwar kein Experte in Sachen JS und Java, aber ich kann mir nicht vorstellen dass das was Du da möchtest so einfach geht...

    Du müsstest ja während der Eingabe Daten an den Server senden, die Antwort empfangen und ohne Reload der Seite ins Formular eintragen.

    Das kann meines Wissens nur per AJAX gelöst werden.

    Alternativ könntest Du alle ma_name beim Laden vom Formular in ein Array einlesen und dann von dort auslesen. Bei vielen ma_name ist das aber auch nicht sinnvoll...

    Grüsse
    Patrick

    1. Hi,

      da hab ich mich wohl nicht recht verständlich gemacht. Ich hab nichts gegen ein Reload, im Gegenteil. Wenn eine Nummer ins Textfeld eingegeben wird, soll das gesamte Formular mit allem was drinsteht abgesendet werden als wäre es der Button gewesen.
      In meinem Servlet kann ich dann erkennen, welches Quelle wirklich für den submit gesorgt hat, und entsprechend handeln.
      Im Falle des Textfeldes soll dann eine Datenbank-Abfrage mit der eingegebenen Nummer erfolgen und alle bisher eingegebenen Werte werden über den value wieder ins Formular geschrieben, genauso wie das Ergebnis der DB-Abfrage. Dann geht das gesamte Formular zurück an den Browser, wo der Benutzer es weiter ausfüllen darf.
      Erst wenn es mit dem Submit-Button abgeschickt wurde, erfolgt die Gültigkeitsprüfung der Daten und letztendlich die Speicherung in der DB.
      Die ganzen Nummern und Namen schon vorher ins Dokument zu schreiben und dann per JS auf dem Client die Zurodnung vorzunehmen ist unpraktikabel, wir reden von knapp 2000 Mitarbeitern ;)

      Jetzt aber wirklich gute Nacht
      Maddy

  2. <form action="Start" method="post" name="Eingabe">
      <tr height="40">
        <td height="40"><label>MA Nr. *</label></td>
        <td height="40"><input type="text" name="ma_nr" size="24" onchange="document.Eingabe.submit();"></td>

    Du kannst hier this.form.submit() verwenden, onchange wird erst nach dem verlassen des Inputfeldes gefeuert.

    Struppi.

    --
    Javascript ist toll (Perl auch!)
    1. habs ausprobiert, ohne Erfolg

      Die JS-Konsole des Firefox behauptet folgendes:

      Fehler: this.form.submit is not a function
      Quelldatei: http://localhost:8080/DKV/servlet/Start
      Zeile: 1

      Das ist die geänderte Zeile:
      <td height="40"><input type="text" name="ma_nr" size="24" onchange="this.form.submit()"></td>

      Und ehe jetzt jemand fragt: Ja, ich habe JS im Browser gestattet :)

      Gruss Maddy

      1. Die JS-Konsole des Firefox behauptet folgendes:

        Fehler: this.form.submit is not a function
        Quelldatei: http://localhost:8080/DKV/servlet/Start
        Zeile: 1

        Dann ist ein Fehler in deinem HTML Code, hast du den mal durch den Validator gejagt?
        Oder hast du eine Formularelement mit dem Namen 'form'?

        Das ist die geänderte Zeile:
        <td height="40"><input type="text" name="ma_nr" size="24" onchange="this.form.submit()"></td>

        So sollte es funktionieren.

        Struppi.

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

        Die JS-Konsole des Firefox behauptet folgendes:

        Fehler: this.form.submit is not a function

        Recht sie hat :-)

        Durch

        <input type="submit" name="submit" value="Senden" />

        wird in der unterhalb deines Formular-Objektes liegenden elements-NodeList automatisch ein Eintrag mit dem Namen bzw. Index "submit" erzeugt.
        Und wie auf der verlinkten Seite unter "Allgemeines zur Verwendung" nachzulesen, hast du darauf u.a. per {formularreferenz}.submit Zugriff.
        this.form.submit verweist also jetzt auf diesen Submit-Button, die Referenz auf die Submit-Methode des Formulars wurde durch die Referenz auf diese Button _überschrieben_ - und deshalb ist das jetzt "not a function (anymore)", lässt sich also auch nicht mehr als Methode aufrufen.

        Wenn du die submit-Methode eines Formulars brauchst, dann vermeide die Verwendung von Formularelementen mit dem Namen "submit".

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Treffer, der Kandidat erhält 101 Punkte, das entspricht so vielen Hubschraubern wie er/sie tragen kann :D

          Wobei Struppi auch recht hatte, der HTML-Code war nicht gültig. Nach Bereinigung der Fehler und Umbenennung des Senden-Buttons funktioniert alles wie es soll. Herzlichen Dank allen Beteiligten!

          Lieben erleichterten Gruss
          Maddy

  3. Hi,

    <form action="Start" method="post" name="Eingabe">
      <tr height="40">

    Soll das HTML sein? form darf kein tr enthalten.
    (ob das nicht-Absenden im onchange mit diesem Fehler zusammenhängt, weiß ich nicht. Probier's aus.

    <td height="40"><label>MA Nr. *</label></td>

    Wenn Du schon label benutzt, warum dann ohne for-Attribut?

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    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.