<datalist>Objekte nur teilweise ausgeben.?
Hallo
Ich habe mir für ein input-feld eine Drop-Down Vorschlagsliste über <datalist> gebastelt. Jetzt habe ich aber das Problem das ich ziemlich viele Einträge in der Data-Liste habe und deswegen wollte ich fragen:
Ist es entweder möglich das immer nur die ersten 3 Objekte angezeigt werden
oder
das man erst wenn man mind. 3 Buchstaben eingegeben hat die Liste angezeigt bekommt.
Danke im Vorraus
2 Antworten
![](https://images.gutefrage.net/media/user/regex9/1455660989427_nmmslarge__0_13_270_270_615d5a3bc6888f4c1486ce2b4d9d8f60.png?v=1455660989000)
Ja, du kannst die Liste selbst mit JavaScript dynamisch filtern.
Folgend einmal ein Beispiel, bei dem nur die ersten drei Einträge eines Arrays angezeigt werden. Nach einer Eingabe von drei Buchstaben werden die restlichen Werte mit eingebracht.
Der HTML-Teil ist natürlich noch recht unspektakulär:
<input list="actors" id="actor">
<datalist id="actors"></datalist>
Interessanter ist das Skript:
function addOption(datalist, value) {
const option = document.createElement("option");
option.value = value;
datalist.appendChild(option);
}
const actors = [
"Emma Watson",
"Jennifer Lawrence",
"Leonardo DiCaprio",
"Patrick Stewart",
"Tom Hanks",
"Tom Hardy"
];
const datalist = document.getElementById("actors");
const initialNumberOfShown = 3;
for (let i = 0; i < initialNumberOfShown && i < actors.length; ++i) {
addOption(datalist, actors[i]);
}
Bis hierhin wird erst einmal nur das Array möglicher Werte definiert und in die Liste eingeflößt.
In diesem Abschnitt wird ein Event Listener an das Eingabefeld gehängt:
document.getElementById("actor").addEventListener("input", function() {
if (this.value.length < 3) {
while (datalist.children.length > initialNumberOfShown) {
datalist.removeChild(datalist.lastChild);
}
return;
}
Bei jedem Tastendruck wird der dazugehörige Handler ausgeführt. Dieser schaut, ob die Anzahl an eingegebenen Zeichen noch unter 3 liegt. Wenn ja, wird die Datenliste erst auf ihren initialen Zustand gebracht (falls zuvor schon einmal Werte zugefügt wurden) und danach kann die Funktion abgebrochen werden.
Liegt die Eingabelänge jedoch über drei Zeichen, wird geprüft, ob überhaupt noch Werte zugefügt werden müssen.
if (actors.length < initialNumberOfShown || datalist.children.length === actors.length) {
return;
}
Wenn dem so ist, passiert das auch.
for (let i = initialNumberOfShown; i < actors.length; ++i) {
addOption(datalist, actors[i]);
}
});
![](https://images.gutefrage.net/media/default/user/9_nmmslarge.png?v=1551279448000)
Danke für diese tolle Antwort und vor allem Danke das du dir noch die Mühe gemacht hast die Erklärungen dazwischen zu schreiben. Top.
![](https://images.gutefrage.net/media/user/TechPech1984/1632773764038_nmmslarge__12_0_519_519_b8bdbc8023c4e7722d66db9f2af2d5fd.png?v=1632773764000)
da musst du dir was eigenes bauen mit javascript .
![](https://images.gutefrage.net/media/user/TechPech1984/1632773764038_nmmslarge__12_0_519_519_b8bdbc8023c4e7722d66db9f2af2d5fd.png?v=1632773764000)
ne leider nicht, da ich react nutze und material-ui
das hat genau diese sachen mit angabe von anzahl zeichen ab suche etc etc .
Wenn du mir so locker antwortest kannst du mir bestimmt auch sagen wie oder mir nützliche Seiten empfehlen die mir bei meinem Problem weiterhelfen.