HTML Suchfunktion mit Weiterleitung?

M

McMoneysack91

Gast
Liebe Freunde,

ich versuche mal, mein Anliegen möglichst präzise zu formulieren.

Auf meiner in HTML/CSS geschriebenen Website möchte ich eine Suchfunktion in eine Artikelseite (ein Glossar, welches irgendwann SEHR lang sein wird) einfügen, die zunächst einmal NUR diese eine Seite abdeckt. Kein Seitenwechsel also. Ganz banal. Fast schon wie STRG+F im Browser. Einfach als Übung.

Die Suche soll aber schon etwas an die Hand nehmen. Das heißt ich arbeite mit festen Listenwerten, die beim Lostippen im Suchfeld schon passende Kandidaten auswerfen. Je weiter man tippt, desto weniger Kandidaten bleiben übrig. Man kann diesen dann einfach anklicken, der Kandidat wird komplett in das Suchfeld übertragen und fertig. Der User bräuchte nur noch das GO oder Lupensymbol anklicken.

Info: Bis hierhin habe ich es erfolgreich bewerkstelligt mit...

<form action="#"> <p> <label> Entries <input type="search" id="search" placeholder="Search..." list="Entries"> <datalist id="Entries"> <option value="Entry1"> <option value="Entry2"> </datalist> </label> <button>Search</button> </p> </form>


Problem 1: Diese Suchvorschläge werden schon beim bloßen Anklicken des noch leeren Suchfeldes unter dem Suchfeld als Kartei ausgefahren. Wenn ich mir überlege, da hunderte oder tausende Einträge zu haben, wirds hässlich! Ich möchte, dass das Suchfeld auch nach dem Anklicken noch nichts auswirft, sondern erst wenn der erste Wert eingetippt wird.


Problem 2: Wie bewerkstellige ich, dass der Search-Button mich auch tatsächlich zum passenden Absatz bringt? Jeder Absatz ist mit einer entsprechenden <a id="..."></a> ausgestattet und kann mittels <a href="#..."></a> referenziert werden. Das tue ich ohnehin gerne, da ich gerne mit Kreuzverweisen arbeite. Wie kriege ich es hin, dass der Search-Button den Wert aus dem Suchfeld nimmt und zur passenden ID führt?

Müsste ich beim <button></button> einen <a href="#..."> Befehl einbauen und bei den <option value> Einträgen entsprechende Variablen? Sodass der Klick auf den Search-Button im Grunde sagt: "Lieber Button, a href mich bitte zu der ID hier auf der Seite, die der ID im gerade eingegebenen Eintrag im Suchfeld entspricht."

Ich stelle mir in etwa sowas vor:

<form action="#"> <p> <label> Entries <input type="search" id="search" placeholder="Search..." list="Entries"> <datalist id="Entries"> <a href="#Entry1"><option value="Entry1"></a> <a href="#Entry2"><option value="Entry2"></a> </datalist> </label> <a href="#active"><button>Search</button></a> </p> </form>


Info: Ich möchte es NOCH tunlichst vermeiden, da mit JavaScript oder PHP Datenbanken zu arbeiten. Ich hoffe sehr, es lässt sich mit HTML bewerkstelligen.
 
Zuletzt bearbeitet von einem Moderator:
Du könntest die id als data-attribute in den option tags dazuspeichern: <option value="Entry1_value" data-link="id1">Entry1</option>
Dann bräuchtest du einen event-handler für dein input, der bei change den gewählten Wert (z.B. "Entry1") ausliest, das passende option Element findet und von dem das data-attribute ("id1") selektiert.

Alles in allem rate ich aber von der Methode mit dem list-attribute ab, das sieht native in jedem Browser anders aus. In FF werden dir beispielsweise ohne Eingabe keine Werte vorgeschlagen, Chrome zeigt beispielsweise in den Vorschlägen für mein obiges Beispiel die Werte "Entry1_value" und "Entry1" getrennt an, FF nicht. Der Wert innerhalb des Tags ("Entry1") ist übrigens der dargestellte Wert im Vorschlag, der Werte im value-attribute ist dann der Wert mit dem das input befüllt wird wenn du den Vorschlag auswählst.

Es gibt haufenweise js snippets und plugins für autocomplete functionality, ich würde auf sowas zurückgreifen.
 
  • Gefällt mir
Reaktionen: Murray B. und McMoneysack91
McMoneysack91 schrieb:
Info: Ich möchte es NOCH tunlichst vermeiden, da mit JavaScript oder PHP Datenbanken zu arbeiten. Ich hoffe sehr, es lässt sich mit HTML bewerkstelligen.
Das wird nichts.
 
  • Gefällt mir
Reaktionen: PHuV
Echt schade. Denn dieses Suchfeld ist ja im Grunde nur eine Liste von Hyperlinks. Am Anfang der Seite kommt ja z.B. ein Alphabet. das A bekommt eben <a href="#glossary-A">A</a> usw.

Und die Überschrift A bekommt eben die Eigenschaft <a id="glossary-A">A</a>. Klickt man nun auf das A in der Alphabetsammlung springt die Seite runter zum entsprechenden Überschrifteintrag A.

Die Hoffnung war, das auch in dieser Suchfunktion zu machen, da hier ja im besten Falle huuuuunderte Begriffe stehen sollten, damit der User beim Eintippen möglichst viel vorgeschlagen bekommt. Nur eben alles versteckt in dieser Suchfunktion.

Ich habe hier noch eine Art Suchfunktion gefunden:

<form id="search" method="get" action="suchen.php"> <p> <label for="suchbegriff">Im Projekt suchen:</label> <input type="search" name="q" id="suchbegriff" value="Suchbegriff" placeholder="Suchbegriff(e)" /> <input type="submit" value="Los !" /> </p> </form>

Da ist der Button schon mit einer Funktion hinterlegt aber auch da werde ich nicht schlauer, wie ich da meine IDs passend einbringen und zum Funktionieren bringen kann.
 
OK ich ergebe mich. JS und PHP also. Ich habe gerade einige YouTube Tutorials zu Suchfunktionen in JavaScript überflogen und die Codes die da erstellt werden sind länger als meine gesamte Seite HTML hat :D Kann das wirklich so stimmen? Habe eher gehofft, dass da ein kleiner 3-Zeiler reicht.

Ich will mit dem Click auf Los/Search/Go/... eigentlich nur dem Browser sagen: "Tu so, als wäre dieser Wert, der gerade in der Search Bar ist ein anklickbarer Text mit <a id=> und als würdest du ihn anklicken"
 
McMoneysack91 schrieb:
es reicht im Grunde eines der Beiden. PHP nimmst du wenn du eine Datenbank durchsuchen willst, Javascript nimmst du wenn du den bestehenden Quellcode der Seite durchsuchen willst.
 
  • Gefällt mir
Reaktionen: Murray B.
Derzeit habe ich mit JavaScript ein Suchfeld erzeugt, welches aber noch sehr eingeschränkt ist. Es öffnet nur auf exakt richtig eingegebenen Wert hin eine mit diesem Wert verknüpfte Seite. Und das auch noch leider im neuen Tab.

<input type="search" placeholder="Search..." id="glossary-search" onchange="openPage()"> <script> function openPage(){ var x = document.getElementById("glossary-search").value; if (x === "index"){ window.open("/index.php"); } } </script>

Aber immerhin schonmal etwas. Das wäre eine gute Option für eine Searchbar in der Navigationsleiste.

Jetzt möchte ich aber gerne eine Liste mit zig Werten erstellen, welche dem User beim Tippen vorgeschlagen werden. Und auch nur diese vorgegebenen Listeneinträge haben Auswirkungen, den User irgendwohin zu geleiten. Bloßes aufdjnckajdnbkojawdk wird keine Auswirkung haben.

Es tut mir Leid, dass ich das hier quasi Stück für Stück mit euch aufbaue. Im Arch-Forum wäre ich schon achtkantig rausgeflogen. Aber online finde ich leider nur schon vorgefertigte gigantöse Scriptblöcke für spezielle use cases. Sowas wie "wenn du zu IDxyz willst, verwendest du diesen Befehl und wenn du Seite xyz aufrufen willst, verwendest du diesen" finde ich leider nicht, wo man sich nach Baukastenprinzip das Modul zusammenbaut.
 
ehrlich gesagt weis ich gar nicht genau was du machen willst. ich dachte du willst begriffe auf einer statischen seite durchsuchen, dazu muß zu keiner anderen seite geleitet werden - stattdessen wird mit ein/ausblenden der Elemente gearbeitet.

das Suchfeld kannst du statisch bauen, Javascript verarbeitet Benutzerinteraktionen ohne Seitenladen mit so genannten "Events" beispielsweise dem Klick, Tastenanschlag oder das Formularabschicken.

MMn macht https://github.com/awbush/jquery-fastLiveFilter genau das, so dass du nur wenige Befehle benötigst um die Funktion herzustellen. Es gibt auch Alternativen, die kein jQuery benötigen, aber das ist jeweils mit mehr Arbeit verbunden.
 
netzgestaltung schrieb:
ehrlich gesagt weis ich gar nicht genau was du machen willst
Pardon, vielleicht habe ich mich wirklich etwas unverständlich ausgedrückt. Ich versuchs mal nochmal:

Ich möchte zwei Arten von "geführten" Suchen bauen. Keine, die Inhalte ausblenden oder so, sondern viel banaler, welche die ZU Inhalten führen.

Beispiel am "Back to top" Button. Ich liebe diese Buttons. Oben auf jeder meiner HTML Seiten habe ich ein <a id="pagetop"></a> sitzen. Im Artikelteil des Bodys habe ich immer einen Button am Ende, welcher einen beim Anklicken zurück zu diesem Seitenanfang geleitet mittels <a href="#pagetop">Back To Top</a>.

So in etwa sollen die Suchen lediglich zu den einzelnen IDs führen.


1. Suche innerhalb einer Seite

Angenommen mein Glossar hat irgendwann tausende Einträge, alle alphabetisch sortiert. Die Überschriften tragen eine <a id="...">. Die Suche ganz oben auf der Seite macht nichts anderes, als die IDs welche ich vorher in einer Liste aufführen würde beim Tippen vorzuschlagen (soweit waren wir schon) und beim Ausführen des Buttons den Nutzer zu der ID zu führen, welche eben im Suchfeld steht.

Damit der Nutzer nicht fnawojefnljesfnlasefnoAEN eintippen kann, werden nur Werte aus der Liste mit tatsächlichen Weiterleitungsfunktionen ausgestattet. Also quasi wie ein modularer <a href="#..."> Button. Nur dass das Suchfeld hier die Variable darstellt.

Angenommen ich habe die Glossareinträge

<a id="tablett">Tablett</a>
<a id="tapete">Tapete</a>
<a id="tisch">Tisch</a>
<a id="stuhl">Stuhl</a>

In der Suchleiste fängt der Nutzer an zu tippen: T... schon wird ihm Tablett, Tapete und Tisch vorgeschlagen. Jetzt könnte er schon einen davon anklicken. Aber er tippt weiter. Ta... (jetzt sind nur noch Tablett und Tapete da). Wenn er weitertippt wie in "Tacker", verschwinden alle vorschläge. Er sieht das, löscht das C und ist wieder bei Ta. Nun klickt er den Wert "Tablett" an und drückt den "Suchen" Button. Ich möchte, dass der Suchen Button den User nun zu der ID hreft, die dem Wert in der Suchleiste entspricht. Wenn in der Suchleiste also der von mir vorgegebene Wert "Tablett" steht, soll der "Suchen" Button <a href="#tablett"></a> ausführen und den User zu diesem ID Eintrag auf der kilometerlangen Verzeichnisseite bringen.

Diese Funktion stelle ich mir eigentlich so banal vor, aber mir fehlt das "Vokabular" um diese Befehle korrekt aufzuschreiben.


2. Genau dasselbe nur in der Navigationsleiste

Noch ist meine Nav-Bar ziemlich überschaubar und gut strukturiert. Aber angenommen ich habe irgendwann ziiiiiiiig Seiten in Ziiiiiiig Aufklappmenüs. Stattdessen gibt der User einfach sein Wunschwort in die Suchfunktion ein und schaut, ob ihm etwas passendes vorgeschlagen wird. Und siehe da, er fängt an zu tippen Bü... und ihm wird vorgeschlagen Bürobedarf, Büromöbel (alles von mir vorgefertigte Werte natürlich). Er wählt wieder seinen Wunschbegriff aus z.B. Bürobedarf und klickt "Suche".

Der Button tut exakt das gleiche wie ein Hyperlink, den ich zuhauf in meinen Seiten als Querverweise verwende. Nämlich <a href="../pages/buerobedarf.html"></a> (ich habe hier eine relative Pfadzuweisung verwendet). Also quasi führe href mit dem Wert aus der Suchfunktion aus.


VIELLEICHT ist die "Suchfunktion" ja auch ein falsch von mir benanntes Thema. Vielleicht heißt das ja auch variabler Index oder weiß der Geier wie :D Vielleicht muss ich einfach ein Inputfeld bauen welches Werte vorschlägt und anschließend einen Button, der eben <a href> mit dem Wert aus dem Inputfeld ausführt.


Es ist eigentlich so eine banale Geschichte, dass es eigentlich nur an meiner Ausdrucksweise liegen kann, zu vermitteln, was ich erreichen will.

Ja natürlich kann der Nutzer einfach in seinem Browser STRG+F drücken und nach Begriffen suchen und sich durch die Seite manövrieren lassen aber a) möchte ich eine in etwa solche Funktion von Haus aus anbieten und b) wäre das eine tolle Übung.
 
also du willst live suchvorschläge einblenden die verlinkt sind aus einer liste von vorgefertigten begriffen, stimmt das so?
 
Exakt. Ich habe das Gefühl, dass ich mit "Suchfunktion" einen etwas falschen Weg eingeschlagen habe, oder?
 
Schöne Seite. Hast du die gebaut??

Übrigens, ja genau so eine Suchfunktion meine ich. Ich fange an zu tippen und mir werden Dinge vorgeschlagen. Nur glaube ich dass deine gebaute Suchfunktion 1000x funktionaler ist als das banale Ding, das ich vorhabe :D
 
jaein, ist eine microsite, mein anteil war html,js,css. was einfaches wäre eine selectbox mit chosen: https://harvesthq.github.io/chosen/
ansonsten geht es eigentlich eh mit dem anfangs erwähnten https://github.com/awbush/jquery-fastLiveFilter nur das nicht nur eingeblendet wird.

1. user tippt -> JS Events werden gefeuert
2. JS Event listener für keyup zähle ob mehr als 2 Buchstaben getippt wurden, wenn ja
3. suche in der liste der anzuzeigenden schlagworte alle passenden, blende den rest aus,
4. blende die liste der schlagworte ein wenn es noch anzuzeigende schlagworte gibt.
5. Input feld verliert fokus: blende die liste der schlagworte aus, ggf alle schlagworte wieder einblenden (in der ausgeblendeten liste)
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: McMoneysack91
einen bug hab ich schon gefunden, btw. .children hat immer eine length weil die nur ausgeblendet werden.

https://jsfiddle.net/wL4a6tyb/1/ hab noch mal ein update gemacht und den bug raus genommen.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: McMoneysack91
Wahnsinn. Ich danke erneut für deine Mühen!

EDIT: ich habe auf der Suche nach Treibern das absolute Bilderbuchbeispiel gefunden!

https://www.canon.de/support/

diese Suchfunktion schlägt ab dem ersten Tippen vorgegebene Einträge vor, die man anklicken kann und führt auf die passende Seite. Wenn ich aber etwas eingebe das keinem der Werte entspricht, führt die Suche keine Funktionen aus und meldet lediglich, dass keine Treffer existieren. Klasse! Jetzt noch den Quellcode herausfinden :D
 
Zuletzt bearbeitet von einem Moderator:
Zurück
Oben