2011-01-17 7 views
10

* Story:jQuery UI Autocomplete: cercare più di un semplice "etichetta" all'interno di una matrice JSON locale

Ho un sito con 2 barre di ricerca, dove gli utenti possono cercare una scuola poi una classe all'interno di quella scuola tramite jQuery completamento automatico . Tutti i miei dati è in un array JSON locale, ad esempio:

scuole var = [{ "label": Boston University, "valore": Boston University, "nickname": BU}]

* Problema:

Durante la ricerca, desidero associare l'input dell'utente non solo a "etichetta" ma anche a "nickname", in modo che la ricerca sia ricercabile sia da "Boston University" che da "BU". Ecco il mio codice ora:

$(document).ready(function(){ 
    $("#school").autocomplete({ 
    appendTo: ".custom-autocomplete", 
    source: schools, 
    minLength: 0, 
    select: function(event, ui) { 
     $("#class").autocomplete({ 
     appendTo: ".custom-autocomplete", 
source: courses, 
minLength: 2, 
select: function(event, ui) { 
      $('#submit_header_form').attr('class','submit_header_form'); 
} 
     }); 
    }); 
}); 

So che possiamo usare PHP su dati remoti per raggiungere questo risultato, ma ho bisogno di utilizzare un array locale per velocizzare la ricerca perché ho un sacco di classi all'interno di ogni scuola.

Poiché sono un codice newbie e lo stack è perfettamente funzionante ora, una soluzione rapida sarebbe l'ideale. Grazie a tutti per il vostro aiuto!

+0

Una soluzione comune è quella di includere il NICNAME nel nome del risultato. Questo è un problema comune nel settore del trasporto aereo, per esempio, controlla questo sito http://www.flightstats.com/go/Home/home.do che ha aeroporti come '(YYZ) Toronto International'. Pubblicare come commento perché questa non è la risposta tecnica. – Incognito

risposta

22

È possibile farlo fornendo source come richiamata. C'è un sito web example on jQuery UI, ma puoi semplicemente modificare l'implementazione standard.

source: function (request, response) { 
    var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i"); 
    response($.grep(schools, function(value) { 
     return matcher.test(value.value) 
      || matcher.test(value.nickname); 
    })); 
} 

Ecco un violino: http://jsfiddle.net/h5E6C/

+0

Esattamente quello che stavo cercando. Grazie mille Rumm tedesco! :) – Brian

+0

mi ha salvato un paio d'ore! :) grazie mille! –

Problemi correlati