1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Datalis mit mehren 'Option value' Werten - Browserselektion einschränkbar?

Dieses Thema im Forum "HTML & XHTML" wurde erstellt von FranzV, 11. September 2016.

  1. FranzV

    FranzV Grünschnabel

    Hallo zusammen,
    ich fülle eine Datalist mit einer sql-abfrage, und zeige mehrere Felder in der Auswahlliste an. Mein Problem ist, dass der Browser bei der Eingabe eines Zeichens alle angezeigten Option value - Felder zum Vergleich heranzieht. Lässt sich das anpassen ? Bsp:
    ... sql abfrage definition ...
    Code (PHP):
    1. <datalist id="idx">
    2. <?php
    3. $sqlr = "SELECT id, Name, Ort, Strasse FROM Adress order by Name" ;
    4. $resultr = mysql_query($sqlr) OR die(mysql_error());
    5. while($rowfthr = mysql_fetch_assoc($resultr)) {
    6.   $idfthr = $rowfthr["id"];
    7.   echo "<option value= $idfthr>".$rowfthr["Name"]. ' - ' .$rowfthr["Ort"]. ' - ' .$rowfthr["Strasse"]. "</option>";
    8. }
    9. ?>
    10. </datalist>
    Wenn man nun im Input 'an' eingibt, zeigt er alle Datensätze in der Auswahlliste an, die entweder im Namen, im Ort oder in der Strasse die Buchstabenkombination 'an' beinhalten. Ich möchte aber, dass nur das Feld "Name" zum Vergleich herangezogen wird. Gleichwohl sollen aber alle 3 Felder in der Liste angezeigt werden.
    Hab bisher leider keine Antwort drauf gefunden, evt weil google meine Frage nicht versteht.... [​IMG]

    Danke für alle Tipps, Franz
     
  2. merzi86

    merzi86 Erfahrenes Mitglied

    Ein Datalist durchsucht nunmal das komplette innerhtml und da steht bei dir nunmal alle 3 Eingaben.

    Was du probieren könntest wäre ein JavaScript, was die Standard Event abbricht (Stichwort preventDefault)
    und dann musst du "manuell" die Liste durchsuchen und die Optionen, in dem in den Ersten Bereich
    der Suchbegriff nicht vorkommt werden einfach versteckt.

    Ob dies allerdings wirklich so funktioniert kann ich dir nicht versprechen.
    Habe das noch nie probiert.

    Desweiteren alle mysql_* Funktionen sind als Deprecated markiert und wurden in PHP7 komplett entfernt.
    Also am besten jetzt schon abgewöhnen mit diesen Funktionen zu arbeiten, da dies in naher Zukunft nicht mehr funktionieren wird.
     
    sheel gefällt das.
  3. FranzV

    FranzV Grünschnabel

    Hallo merzi,
    Danke. und ja, ich bin grad dabei den alten Code umzustellen, und dabei hab ist mir das mit der Datalist noch aufgestossen. Aber da scheint es wirklich keine einfache Lösung zu geben. Was html5 mit datalist bietet ist an sich schon sehr gut, wie manche Browser das interpretieren ist stellenweise genial (Fire) bis katastrophal (saf). In meinem Fall eben doof, wenn man nur mit einem Feld arbeiten möchte. Wenn man zig tausende von Adressen in der DB hat, viele in einem Nest wohnen, dass 'dorf' im Ortsnamen enthält und du suchst jemanden der Dorfner heisst... Bis zur Eingabe der ersten 4 Stellen ist die Liste Müll. Aber egal, muss man eben mehr Zeichen eingeben.
     
  4. Alice

    Alice Erfahrenes Mitglied

    Vielleicht habe ich die Frage nicht verstanden aber probier das mal aus...

    PHP:
    1. <?php
    2.    $sqlr = "SELECT * FROM Adress WHERE Name LIKE '%an%' ORDER BY Name" ;
    3.    $resultr = mysql_query($sqlr) OR die(mysql_error());
    4.  
    5.  
    6.    echo '<datalist id="idx">'."\n";
    7.  
    8.    while($rowfthr = mysql_fetch_assoc($resultr))
    9.    {
    10.        $idfthr = $rowfthr["id"];
    11.        echo "<option value= $idfthr>".$rowfthr["Name"]. ' - ' .$rowfthr["Ort"]. ' - ' .$rowfthr["Strasse"]. "</option>";
    12.    }
    13.  
    14.    echo '</datalist>'."\n";
    15. ?>
     
  5. merzi86

    merzi86 Erfahrenes Mitglied

    Eine andere Idee wäre es doch die eine Liste in 3 aufzuteilen.

    Als erstes Wählt man die Gemeinde aus, in der 2. dem Gemeindeteil (Stadtgebiet bzw. das jeweilige Dorf) und in der Dritten dann die Straße.
    Die 2. und 3. Liste kann man ja nach den Auswahl Kriterien der vorher gehenden Liste filtern.
     
  6. FranzV

    FranzV Grünschnabel

    Danke merzi, aber eine where Klausel hilft hier nicht weiter. Zur Erklärung, das Formular besteht aus mehreren Felder. Eben ein Adresseingabe. Eine per SQL vorgefüllte Datalist hat den Vorteil, dass während der Eingabe des Namens bereits alle Namen vorgefiltert aufgelistet werden, die (zumindest bei firefox) den eingegebenen Wert irgendwo beinhalten. (IE prüft nur ab Beginn, safari kann es gar nicht). Wenn nun in den Option Values zugleich Ort und Strasse angezeigt werden, kann man wesentlich bestimmter erkennen, ob der eingegebene Name bereits vorhanden ist, und kann eine erkannte Person auswählen, ansonsten füllt man auch die restlichen Felder aus, und die Adresse wird angelegt. Andererseits listet Firefox aber auch Namen auf, die den eingegebenen Wert im Orts- oder Strassennamen beinhalten, weil Strasse und Ort in den Option values enthalten sind, um angezeigt werden zu können.
    Also, wenn ich als Name "Jäger" eingebe, dann werden auch alle Personen aufgelistet, die in einer "Jägerstrasse" wohnen, und wenn deren Name mit einem Buchstaben vor J beginnt, rutschen die vorhandenen Jäger in der Liste u.U. weit nach unten, und die Liste wird unnötig lange. Da der Name als erstes Feld eingegeben wird, hat man noch nichts für eine where Klausel.
    Die Datalist wurde eben seiner Funktionalität gewählt, weil man hier mit einem einzigen Eingabefeld einen Mehrfachnutzen erziehlt. Ein vollwertiges Eingabefeld mit einer dynamisch gefilterten Select-Liste.
     
  7. Alice

    Alice Erfahrenes Mitglied

    FranzV gefällt das.
  8. FranzV

    FranzV Grünschnabel

    Danke, sieht gut aus. Aber für mich als Anfänger ist das wohl noch etwas zu komplex. Werd mich aber da mal einlesen, evt krieg ich es hin. Da mein Problem html seitig wohl nicht zu lösen ist schliesse ich das Thema mal.
     
  9. mermshaus

    mermshaus Erfahrenes Mitglied

    Dann ist es eh der falsche Ansatz, die *alle* in eine Datalist (also gewissermaßen in den HTML-Code) zu schreiben. Das ist Overkill. Da ist eine JS-Lösung, die AJAX nutzt, klar vorzuziehen.
     
  10. sheel

    sheel I love Asm Administrator

    Halb-OT

    Da bist du wohl noch sehr genügsam

    Ich hab heute 5 Stunden vergeudet, bis ich eingesehen habe, dass Inputs mit Datalist in "keinem" meiner getesteten 8 Browser irgendwie zufriedenstellend funktionieren. 30KB JS dazupacken, nur dafür, war am Ende die bessere Lösung (jQuery-UI, per Konfigurator nur das Nötigste)

    Dass HTML 2016 noch immer keine Combobox hat, die nicht komplett offen für Interpretation ist was es eigentlich sein soll, ist schon irgendwie traurig.
     
Die Seite wird geladen...
Ähnliche Themen - Datalis mehren 'Option
  1. arraybreak
    Antworten:
    5
    Aufrufe:
    1.700
  2. thehacker
    Antworten:
    5
    Aufrufe:
    1.776
  3. Nabi
    Antworten:
    11
    Aufrufe:
    1.014