onChange reagiert nicht
Maddy
- javascript
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
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
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
<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.
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
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.
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
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
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