2012-06-08 27 views
6

Sto utilizzando jQuery-autocomplete plugin per ottenere suggerimenti per il completamento della stringa di input utilizzando una chiamata AJAX a un server. Inoltre, il server si occupa di restituire i risultati nell'ordine in cui vorrei che fossero visualizzati, ma il completamento automatico li mostra in un ordine diverso.jQuery Ordine di completamento automatico dei risultati

Come è possibile configurare il completamento automatico di jQuery per non riordinare l'output? Non ho bisogno di alcun tipo di elaborazione da parte del cliente in quanto i dati sono già stati ordinati/ordinati come richiesto.

+0

cosa intendi per "completamento automatico li mostra in un ordine diverso"? – Shyju

+0

Intendo che l'ordine delle stringhe visualizzate nel menu a discesa è diverso da quello restituito dal server, (che è una stringa di "\ n" sequenza di caratteri separata, come indicato nella documentazione). – rajatkhanduja

risposta

8

Beh, si è rivelato essere più semplice di quanto pensassi. Ho deciso di leggere il codice del plugin e modificarlo commentando il codice che ordina il mio output.

Ecco quando ho trovato una variabile 'sortResults: true' nei valori predefiniti. Quindi, tutto ciò di cui avevo bisogno era di impostare quella variabile su false. Non ho trovato questo nella documentazione però.

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

Ora la produzione è nell'ordine esatto in cui ho bisogno.

ho avuto l'idea di leggere il codice per trovare/risolvere il problema da qui: jQuery "Autocomplete" plugin is messing up the order of my data (Questo non è lo stesso plugin)

Grazie. :)

+0

Great! Non dimenticare di accettare la tua risposta :) –

+0

Lo farò sicuramente, dopo 48 ore. – rajatkhanduja

+0

È più che altro, è molto più facile visualizzare il risultato pre-elaborato dal server piuttosto che farlo lato client. +1 – Andreas

18

È necessario eseguire semplicemente l'ordinamento dei risultati del server prima di inviarlo alla funzione di completamento automatico.

Quindi, prima di echo json_encode($return_arr); utilizzare la funzione sort() su $return_arr

Si può anche provare qualcosa di simile:

La logica è quella di costruire una serie di partite che iniziano con il termine, e quindi concatenare quello con le partite che contengono il termine ma non iniziare con esso.

$(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)); 
     } 
    }); 
}); 

Esempio:http://jsfiddle.net/zkVrs/

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

+1

'il server si occupa di restituire i risultati nell'ordine in cui vorrei che fossero visualizzati, ma il completamento automatico li mostra in un ordine diverso. Sembra che l'OP lo stia già facendo. – Dennis

+0

http://stackoverflow.com/a/8302996/277923 Ho letto questo link, ma non riesco a capire come posso usarlo per fare 'no sorting'.Vorrei che jQuery-autocomplete mostrasse il risultato nell'ordine restituito dalla chiamata ajax. – rajatkhanduja

+1

Condividi il tuo codice. –

1

Poiché non ci sono opzioni sortResults nella build attuale del plugin di completamento automatico jQuery, ho dovuto cercare un'altra soluzione a questo problema e ho scoperto che l'unico motivo per cui il plug-in è il risultato dell'ordinamento è che la risposta del server viene normalizzata ogni volta che non è un array puro con oggetti {etichetta: ..., valore: ...}.

Considerando PHP come lingua di utilizzo, json_encode (array_values ​​($ your_array)); dovrebbe fare il trucco.

+0

Grazie @sKopheK! Giusto per chiarire, fornire questo al parametro di risposta della funzione sorgente: '[{label:" suggestion ", value:" suggestion "},]' - non questo: '[" suggestion ",]' – joeymink

Problemi correlati