AJAX: Autovervollständigung Textbox

  • Salut zusammen,

    ich schreibe mir gerade eine Linksliste in PHP. Für diese Links werden Tags eingegeben, mit denen man später die Liste durchsuchen kann. Das hat auch alles so geklappt, wie ich mir das vorgestellt habe.

    Jetzt möchte ich noch ein weiteres Feature einbinden, und zwar:
    Bei dem Eingabe eines neuen Links soll das Textfeld für die Tags eine Autovervollständigungsfunktion bieten, so wie ähnlich wie bei Google.
    In der Theorie habe ich mir das so vorgestellt, dass ich beim generieren der HTML-Seite der JavaScript-Funktion einen String der Form "TAG1 TAG2 TAG3" übergebe. In der Textbox wird bei Eingabe eines neuen Tags (es können mehrere durch Space getrennt eingegeben werden) dann jeweils eine Liste mit passenden Tags angezeigt.

    Leider habe ich von JavaScript aber überhaupt keine Ahnung.

    Vielleicht kann mir jemand einen Beispielcode posten?


    Danke im Voraus,

    Stefan

  • wie bei googel ?!

    wie meinst du das ?!?!

    das input feld auf googel ?!

    oder die funktion das dier der suchbegriff in der richtigen schreibweise angeboten wird ?!

    den das input feld, ist eine funktion des browseres.

  • Salut,

    ich meine das Eingabefeld. Das Input Feld ist eine Funktion des Browsers, auch, dass er sich merkt, welche Texte ich eingeben habe.

    Was ich meine ist, dass ich mehrere durch Space getrennte Stichworte in das Textfeld eingeben kann und mir die Seite jeweils Stichworte vorschlägt, die bereits bei anderen Eingaben verwendet wurden. Von PHP Seite kann ich die als String in den JavaScript-Teil der Seite einfügen, das ist nicht das Problem. Nur, wie der JavaScript-Teil aussehen muss.


    Stefan

  • Nein,

    irgendwie reden wir hier aneinander vorbei. Lass es mich an einem Beispiel erklären. Ich habe bei vorigen Eingaben folgende Stichwörter eingegeben:

    Haus, Wetter, Auto, Spiegel, Tisch, Tröte, Trichter

    Jetzt möchte ich eine neue Eingabe machen und dort die Tags Wetter, Tisch, Garten verwenden.

    In meinem Browser gebe ich jetzt in das Tags-Feld ein:
    W daraufhin erscheint Wetter als Vorschlag, ich wähle Wetter aus
    T hier erscheinen Tisch, Tröte und Trichter als Vorschläge, also gebe ich weiter
    i ein, jetzt erscheint nur noch Tisch als Vorschlag, den wähle ich.
    Garten dafür gibt es noch keine Vorschläge.

    Da ich im PHP-Skript doppelte Einträge herausfiltern werde, kann dann auch nicht mehr von prügeln gesprochen werden ;-).


    Stefan

  • naja es dürfte immer noch viel zu vile ergebnisse sein, die gebracht werden,
    dazu sehe ich keine möglichkeit soetwas mittels JS zu realisieren.

    hat ja google so auch nicht.

  • Salut,

    da es sich bei mir um eigene Tags handelt, werden diese wohl kaum mehr als 50 werden. Google blendet sehr wohl oft gesuchte Anfragen in einer Liste unter der Textbox an. Das wird mittels XMLRequest realisiert. Aber ich will die Tags ja gar nicht vom Server nachladen, mir reicht es, wenn ich sie aus einem Array in der HTML-Datei hole.


    Stefan

  • Salut,

    hier ein Screenshot der entsprechenden Funktion bei Google:

    Korrektur: hier ein Screenshot der vermeintlichen Funktion bei Google:
    Korrektur der Korrektur: Und es ist doch eine Funktion von Google: Google Suggest

    [Blockierte Grafik: http://vbtricks.vb.funpic.de/ztemp/google.png]

    Warum das bei mir unter Windows (IE und Firefox) nicht, sondern nur im Firefox unter Linux tut, ist mir jetzt nicht klar. Das ist aber auch nicht relevant.

    Korrektur: Das lag daran, dass auf der Google-Hauptseite diese Funktion noch nicht eingebunden ist und diese dann von einem PlugIn meines Browsers, dass ich nur unter Linux installiert hatte, nachgerüstet wurde.

    Stefan

  • naja ich fände es schon interessant, da ich diese funktion weder im quelltext belegt noch im IE oder im FF entdecken kann.

    und sie daher in meinen augen NICHT existiert.
    bzw nicht für mich.

  • Salut,

    okay, das war ein kalter, ein ganz kalter. Der Screenshot kommt nur zustande, wenn man die CustomizeGoogle-Extension für Firefox installiert hat. Es handelt sich also nicht um eine Standard-Funktion von Google. Da hab ich mich verrannt.

    Korrektur: Es gibt diese Funktion doch direkt von Google, nämlich Google Suggest.

    Das ändert aber nichts an der Realisierbarkeit einer derartigen Funktion, XMLHttpRequest existiert wirklich, die "zu vielen Ergebnisse" werden vom Server herausgefiltert. Aber das brauche ich ja gar nicht, ich habe ja mein Array. Einziges Problem, dass ich sehe ist die Anzeige der "Treffer", das müsste doch aber eigentlich auch mittels DHTML möglich sein.


    Stefan

  • Bist du dir sicher das es bei google durch die Extension nicht lokal abgelegt wird? Also die schonmal eingegebenen Suchbegriffe lokal gespeichert werden?!

    Online per Datenbank wäre das doch viel zu groß...

  • die daten kommen wirklich vom server...

    aber egal....

    am besten ist, das du keine textbox sondern etwas wie:

    ich habe es nicht getest, aber es sollte gehen, oder es zumindest verdeutlichen, wie es geht...


    das
    content[]="Begriff1";
    content[]="Begriff2";
    content[]="Begriff3";

    wird dann mit PHP generiert...

  • Salut,

    das sieht nicht schlecht aus! Mir ist auch klar, was du da machst, bloß klappt es leider nicht. Der JavaScript-Debugger von Firefox behauptet, die Funktion check nicht gefunden zu haben. Das ist vermutlich irgendwo nur ein kleiner Fehler, ab ich find ihn leider nicht, scheine Tomaten vor den Augen zu haben. Für einen kleinen Denkansatz wäre ich dankbar.


    Stefan

    Mein HTML-Dokument (Das fett markierte habe ich auskommentiert, schien mir da nicht hinzupassen):

  • so es wahren noch 10-12 fehlerchen...

    PS ich finde die funktion garnet mal so schlecht.
    Baue eh gerade die suchfunktion von meinem CMS neu.
    da werde ich das denn einbauen...

    aber dafür wird das ganze system noch auf xml get umgestellt um die datein möglichst klein zu halten.

  • Salut,

    jetzt funktioniert es einwandfrei! Das werde ich jetzt noch etwas umbauen, aber das traue ich mir dann selbst zu ;-).

    Die Idee mit dem Div war vor allem das, was mir fehlte. Da kannte ich mich zu wenig mit den Möglichkeiten bei DHTML aus.

    Habe die beiden Versionen auch vom Texteditor vergleichen lassen, solche Fehler unterlaufen mir auch (# und class, . und id, Dimension Array). Ganz übel ist es in PHP, wo die Variablen nicht explizit deklariert werden müssen. :roll: Aber ich schweife vom Thema ab.

    Meine modifzierte Lösung werde ich dann später auch posten.


    Vielen Dank, das hat mir wirklich weitergeholfen,

    Stefan

  • Salut,

    das hab ich mir fast gedacht, nachdem du die Eingabe erst mal mit toLowerCase behandelst ;)

    So, ich habe die Funktion jetzt meinen Bedürfnissen entsprechend umgebaut. Was ich alles verändert habe:

    • Eingabe mehrerer Tags (diese sind durch Space getrennt)
    • Der Focus wird nach Auswählen des Tags wieder zurück in die Textbox gesetzt.
    • Die Vorschläge werden gleich beim Laden angezeigt


    Damit ist der Thread von mir aus dann erfolgreich beantwortet. Danke nochmal.


    Stefan

    Hier also die neue Version: