2012-06-08 14 views
6

Ich verwende die jQuery-autocomplete plugin, um Vorschläge für die Vervollständigung der Eingabezeichenfolge mit einem AJAX-Aufruf an einen Server zu erhalten. Außerdem sorgt der Server dafür, dass die Ergebnisse in der Reihenfolge zurückgegeben werden, in der sie angezeigt werden sollen. Die automatische Vervollständigung zeigt sie jedoch in einer anderen Reihenfolge an.jQuery Autocomplete Reihenfolge der Ergebnisse

Wie kann ich jQuery Autocomplete konfigurieren, um die Ausgabe nicht neu zu ordnen? Ich benötige keine Verarbeitung auf Kundenseite, da die Daten bereits nach Bedarf sortiert/sortiert wurden.

+0

was meinst du mit "auto complete zeigt sie in einer anderen Reihenfolge"? – Shyju

+0

Ich meine, dass die Reihenfolge der Zeichenfolgen, die in der Dropdownliste angezeigt wird, sich von der vom Server zurückgegebenen Zeichenfolge unterscheidet (was eine Zeichenkette von "\ n" getrennter Zeichenfolge ist, wie in der Dokumentation angegeben). – rajatkhanduja

Antwort

8

Nun, es stellte sich einfacher aus als ich dachte. Ich entschied mich, den Code des Plugins zu lesen und zu modifizieren, indem ich den Code auskommentierte, der meine Ausgabe sortiert.

Das ist, wenn ich eine Variable 'sortResults: true' in Standardeinstellungen gefunden habe. Also musste ich diese Variable nur auf false setzen. Ich habe das jedoch nicht in der Dokumentation gefunden.

$('#search').autocomplete ({ url: "index.php", sortResults: false })

Jetzt ist die Ausgabe genau in der Reihenfolge, dass ich brauche.

bekam ich die Idee, den Code zu lesen, um das Problem von hier zu finden/lösen: jQuery "Autocomplete" plugin is messing up the order of my data (Das ist nicht das gleiche Plugin)

Dank. :)

+0

Großartig! Vergessen Sie nicht, Ihre eigene Antwort zu akzeptieren :) –

+0

Wird das sicherlich tun, nach 48 Stunden. – rajatkhanduja

+0

Das ist mehr wie es, so viel einfacher, das vorverarbeitete Ergebnis vom Server anzuzeigen, als es Client-Seite zu tun. +1 – Andreas

18

Sortieren Sie einfach die Serverergebnisse, bevor Sie sie an die automatische Vervollständigung senden.

Also, bevor Sie die sort() Funktion auf $return_arr

Sie verwenden echo json_encode($return_arr); auch so etwas wie dies versuchen:

Die Logik eine Reihe von Übereinstimmungen aufzubauen ist, die mit dem Begriff zu starten, und dann Verknüpfen Sie das mit Übereinstimmungen, die den Begriff enthalten, aber nicht damit beginnen.

$(document).ready(function() { 
    var source = ['Adam', 'Benjamin', 'Matt', 'Michael', 'Sam', 'Tim']; 
    $("input").autocomplete({ 
     source: function (request, response) { 
      var term = $.ui.autocomplete.escapeRegex(request.term) 
       , startsWithMatcher = new RegExp("^" + term, "i") 
       , startsWith = $.grep(source, function(value) { 
        return startsWithMatcher.test(value.label || value.value || value); 
       }) 
       , containsMatcher = new RegExp(term, "i") 
       , contains = $.grep(source, function (value) { 
        return $.inArray(value, startsWith) < 0 && 
         containsMatcher.test(value.label || value.value || value); 
       }); 

      response(startsWith.concat(contains)); 
     } 
    }); 
}); 

Beispiel:http://jsfiddle.net/zkVrs/

Quelle:https://stackoverflow.com/a/8302996/973155

+1

'Der Server kümmert sich darum, die Ergebnisse in der Reihenfolge zurückzugeben, in der sie erscheinen sollen, aber die automatische Vervollständigung zeigt sie in einer anderen Reihenfolge an. Es klingt, als würde das OP dies bereits tun. – Dennis

+0

http://StackOverflow.com/a/8302996/277923 Ich lese das aus dem obigen Link, aber ich bin nicht in der Lage zu ergründen, wie kann ich das verwenden, um überhaupt keine Sortierung zu tun.Ich möchte, dass jQuery-autocomplete das Ergebnis in der vom ajax-Aufruf zurückgegebenen Reihenfolge anzeigt. – rajatkhanduja

+1

Teilen Sie Ihren Code. –

1

Da es im aktuellen Build des jQuery Autocomplete Plugins keine Sortieroptionen gibt, musste ich eine andere Lösung für dieses Problem suchen und fand heraus, dass das Serverergebnis nur dann normalisiert wird, wenn es nicht a ist reines Array mit Objekten {label: ..., value: ...}.

Unter Berücksichtigung von PHP als eine Sprache Ihrer Verwendung, json_encode (array_values ​​($ your_array)); sollte den Trick machen.

+0

Dank @sKopheK! Nur um dies zu verdeutlichen, stelle dies dem Antwortparameter der Quellfunktion zur Verfügung: '{{label:" suggestion ", value:" suggestion "},]' - nicht das: '[" suggestion ",]' – joeymink

Verwandte Themen