2011-01-10 14 views
2

Ich verwende diese ein:jQuery - Plugin zur automatischen Vervollständigung

https://github.com/agarzola/jQueryAutocompletePlugin

Das einzige Problem ist, dass, wenn Sie das erste Zeichen in das Eingabefeld eingeben, werden alle Begriff Vorschläge angezeigt werden, einschließlich der Bedingungen, die don Ich habe dieses Zeichen nicht.

Und erst nachdem Sie das 2. Zeichen eingegeben haben, verhält es sich normal und zeigt Tag-Vorschläge an, die nur diese 2 Zeichen enthalten.

Ich verwende diese Konfiguration:

$('input.autocomplete').autocomplete("localhost/boo/?get_suggestions=1", { 
    width: 250, 
    max: 100, 
    matchContains: true, 
    minChars: 1, 
    selectFirst: true, 
    cache: false, 
    multiple: true, 
    multipleSeparator: " " 
}); 

Ist dies eine Abhilfe jemand wissen?

alt text

Auch wenn ich schreibe eine zufällige Zeichenfolge, die ich weiß, es ist nicht in der Liste, zum Beispiel. *&@FGBHFHBOFUBF*UB# es wird wieder die gesamte Liste angezeigt :(

das Back-end:

if($_GET['get_suggestions']): 
    $terms = get_all_terms(); 
    foreach ($terms as $term) echo $term['title']."\n"; 
    die(); 
endif; 
+0

versuchen, "get_all_terms()" zu posten. Warum zögerst du, den Code zu posten? Außerdem, wenn Sie etwas eingeben, öffnen Sie die Entwickler-Tools (inspect Element in Chrome, oder installieren Sie die firebug ext in Firefox) und beobachten Sie die Xmlhttp Anfragen (in Chrom, klicken Sie auf das Symbol der Konsole und mit der rechten Maustaste, wählen Sie log xmlhttp Anforderungen). Prüfen Sie, ob bei der Eingabe von "a" das "a" und bei der Eingabe von "ac" das "ac" übergeben wird. Wie unten erwähnt, könnte es nur das "a" in "ac" und nichts in "a" – Jason

+0

einreichen Quelle: Funktion (Anfrage, Antwort) {var filteredArray = $ .map (orignalArray, Funktion (Element) {if (item. value.startsWith (request.term)) {return item;} else {return null;}}); Antwort (gefiltertesArray); }, http://stackoverflow.com/questions/3148195/jquery-ui-autocomplete-use-startswith –

Antwort

1

Ich bin derjenige, der das GitHub Repo aufrechterhält. Hier ist, was passiert:

Im Fall der Verwendung einer URL für die Daten, sendet das Skript die Anfrage als was auch immer Sie in der angegebenen URL festgelegt, und fügt q=[current input value] am Ende. Wenn Sie beim ersten Laden "a" eingeben, wird dies an Ihr Backend-Skript gesendet: localhost/boo/?get_suggestions=1&q=a. Daher erwartet autocompelte.js, dass diese anfängliche Abfrage nur Elemente erzeugt, die der Abfrage entsprechen. Nach dieser anfänglichen Anforderung übernimmt das Skript die Filterteilmengen intern, um die Serverlast zu verringern. Dies erklärt, warum "ac" nur Elemente zurückgibt, die Ihren Kriterien entsprechen. Dies ist das Autocomplete-Skript, das seine Aufgabe erledigt, zu filtern, was der Server ihm gegeben hat.

Wenn ich Ihren Backend-Code richtig interpretiere, macht er keinerlei Gebrauch von dem q Parameter, der in der Anfrage gesendet wird, so dass Ihr Code alle möglichen Ausdrücke zurückgibt. Bei der automatischen Vervollständigung wird davon ausgegangen, dass dies das Ergebnis einer ordnungsgemäßen Suche ist. Sie werden darauf hingewiesen und darauf gewartet, dass mehr Zeichen eingegeben werden, damit die Liste weiter gefiltert werden kann.

Der Punkt ist, dass Sie benötigen, um Ihre Backend-Skript, um die Liste von Begriffen zu machen filtern, was auch immer stimmt mit dem q Parameter, bevor es dem Skript zur automatischen Vervollständigung zurück.

Lassen Sie mich wissen, ob ich Ihnen weiterhelfen kann!

+0

danke, ich verstehe jetzt: P Aber macht das Skript nicht den Server etwas zu viel abfragen? – Alex

+1

Sie sollte den Server nur jedes Mal abfragen, wenn die Mindestanzahl an Zeichen eingegeben wurde (in diesem Fall ein Zeichen). Bedenken Sie jedoch, dass nach der ersten Abfrage der Rest der Zeichen für diesen Begriff auf JS-Ebene gefiltert wird. In der Tat ist die Art, wie Sie es jetzt eingerichtet haben, so: nur eine Abfrage wird beim ersten Laden (wenn Sie "a" eingeben), und der Rest ist lokal (JS/Browser, wenn Sie "c" eingeben) gemacht . – Alfonso

+0

danke :) Darf ich fragen, ob es möglich ist, das Layout des Vorschlagsfelds so zu ändern, dass es auch andere Daten enthält - wie die Beispiele 2, 3 hier: http://tomcoote.co.uk/wp-content/CodeBank/Demos /JSONSuggestBox/demo.html – Alex

1

würde ich ganz, erstes Zeichen Vorschläge deaktivieren vorschlagen und auf der zweiten oder sogar dritten Buchstaben beginnen die meisten Leute mich eingeschlossen finden. es ärgerlich, sofort zu bekommen mit Vorschlägen spammed ein "b" nach der Eingabe.

+0

Wenn ich das tue, dann passiert das Gleiche (nach 'minChars' Zeichen). Wenn ich also zu 3 wechseln würde, würde es sich nur normal verhalten, wenn ich mindestens 4 Zeichen eingegeben hätte ... Aber danke für den Vorschlag, ich werde das tun, wenn ich es funktioniere :) – Alex

+0

Ohh, aber wer hat gesagt, dass ich rede? über minChars ghe ghe ghe :) Du könntest Hacky bekommen und die Vorschläge verstecken, bis deine persönlichen MinChars erreicht sind. Aber zuerst sollten Sie versuchen, das Problem herauszufinden. ** EDIT ** Ein paar Dinge, die ich bemerkt habe, ist nicht das Problem in localhost/boo /. Und beim Lesen der GitHub-Seite im AutoComplete-Plugin heißt es "Jörn Zaefferers (jetzt veraltetes) jQuery-Plugin". Könnte interessant sein. – orlp

+0

Ja, das Plugin auf github ist ein Port eines veralteten Plugins (das von Bassistance.de, das nun in jquery UI integriert ist). – Alex

1

Ihre minchars ändern zu 2

minChars: 2 

Das wird es so machen, dass es nur Dinge aus dem 2 Zeichen vorschlägt.

oder versuchen, mehrere zu deaktivieren.

multiple: false 

Möchten Sie das aktivieren?

Wenn das nicht Ihre Tasse Tee ist, schreiben Sie den Code für localhost/boo /? Get_suggestions = 1, und wir werden eine sehen :)

+0

Wie ich oben gesagt habe, bleibt der Fehler bestehen, aber diesmal ist es auf dem zweiten Zeichen :) Der Code für 'localhost/boo /? Get_suggestions = 1' sieht gut aus, es gibt nur eine Liste von Begriffen in jeder Zeile ... – Alex

+0

Post Der Code für uns, das ist der einzige Weg, wie wir das beheben können. – Jason

+0

okay. Ich habe .... – Alex

1

Dass die automatische Vervollständigung Code auf einem Teil und anschauen falsch ist. Aus dem Bild, das Sie gepostet haben, als Sie a eingegeben haben, wurde eine lange Liste aller Begriffe angezeigt; Wenn Sie ac eintippten, stimmte die Liste der Vorschläge a anstelle von ac überein.

Was bedeutet das? Der Code nimmt den Eingabewert , bevor das neue Zeichen berücksichtigt wird. Sie können in den Plugin-Code eintauchen oder ein neues Plugin verwenden.

Verwandte Themen