Robert Bamler: Autovervollständigung von <INPUT>-Feldern mit Javascript

Beitrag lesen

Hallo Verona,

mir ist noch nicht ganz klar geworden, mit was die Eingabe "aufgefüllt" werden soll und was das Benutzerwörterbuch von Word damit zu tun hat. Wenn ich das Richtig verstanden habe, ist die Benutzer.dic nur eine Erweiterung zum von Microsoft bereitgestellten Wörterbuch, in dem man oft verwendete Wörter speichern kann, damit sie Word nicht als Fehler ankreidet.

Aber ich schätze mal, du hast irgendwie eine Liste von Strings vorliegen, die mit hoher Wahrscheinlichkeit in das input-Feld eingegeben werden. Dann würde ich diese Strings einfach in einem Array ablegen:

wahrscheinlicheEingaben = new Array(
  "Eingabe 1",
  "Eingabe 2",
  "Eingabe 3"
);

Falls diese erwarteten Eingaben vom jeweiligen Benutzer abhängig sind, kannst du so ein Array ja auch relativ einfach serverseitig erstellen lassen. Du solltest aber die Anzahl der zu erwartenden Eingaben auf ein Maximum beschränken, damit keine allzu großen Seiten übertragen werden müssen. Am besten ordnest du die Einträge des Arrays auch nach dem Datum, an dem die jeweilige Eingabe zuletzt entgegengenommen wurde. Soll heißen, dass oben erst kürzlich gemachte Eingaben stehen, die folglich auch jetzt eher zu erwarten sind. Erst weiter unten kommen dann die älteren Eingaben.

Dann kannst du über den onchange-Eventhandler im input-Feld eine Funktion aufrufen, welche die Länge des eingegebenen Strings ausliest und in einer Variablen eingabeLaenge speichert. Anschließend geht diese Funktion in einer Schleife das Array wahrscheinlicheEingaben durch und überprüft je Eintrag, ob die Länge des Strings des jeweiligen Eintrags größer oder gleich groß ist wie eingabeLaenge. Ist das der Fall, so werden die ersten eingabeLaenge Zeichen des aktuellen Eintrags des Arrays mit der Eingabe im Textfeld verglichen. Sind sie gleich (evtl. wird Groß-/Kleinschreibung ignoriert), so bricht die Schleife ab und der gefundene String wird als Vorschlag ausgegeben.

Du musst dir nur noch überlegen, *wie* du diesen Vorschlag ausgibst. Teilweises Markieren des Textes in einem input-Feld geht glaube ich mit JavaScript nicht. Du könntest aber beispielsweise unter dem Input-Feld eine Auswahlliste anzeigen, in der zuerst alle zu erwartenden Einträge angezeigt werden und nach der Eingabe eines Zeichens im input-Feld nur noch die Einträge, die mit dem/den eingegebenen Zeichen anfangen. Allerdings sollte das nicht den Eindruck erwecken, dass nur die vorgeschlagenen Eingaben möglich sind. Man kann ja auch irgend etwas anderes eingeben, wenn ich dich richtig verstanden habe.

Viel Erfolg,
Robert

--
Dieser Beitrag wurde zu 100% aus ganzen Sätzen hergestellt und ist biologisch abbaubar.