2011-01-17 15 views
10

* Historia:jQuery UI Autocompletar: buscar algo más que "etiqueta" dentro de una matriz JSON locales

Tengo un sitio con 2 barras de búsqueda, donde los usuarios pueden buscar una escuela y luego una clase dentro de la escuela a través de jQuery autocompletado . Todos mis datos se encuentra en una matriz JSON local, por ejemplo:

escuelas var = [{ "label": la Universidad de Boston, "valor": la Universidad de Boston, "apodo": BU}]

* Problema:

Al realizar una búsqueda, quiero hacer coincidir la entrada del usuario no solo para "etiquetar" sino también para "apodo", para que la escuela pueda buscarse en "Boston University" y "BU". Aquí está mi código de ahora:

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

Sé que podemos usar PHP en datos remotos para lograr este resultado, pero necesito utilizar un array local para acelerar la búsqueda, porque tengo un montón de clases dentro de cada escuela.

Como soy un código novato y la pila es completamente funcional ahora, una solución rápida sería ideal. ¡Gracias a todos por su ayuda!

+0

Una solución común es incluir la nicname en el nombre del resultado. Este es un problema común en la industria de las aerolíneas, por ejemplo, consulte este sitio http://www.flightstats.com/go/Home/home.do que tiene aeropuertos como '(YYZ) Toronto International'. Publicar como un comentario porque esta no es la respuesta técnica. – Incognito

Respuesta

22

Puede hacerlo suministrando source como una devolución de llamada. Existe un sitio web example on jQuery UI, pero solo puede modificar la implementación estándar.

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

Aquí es un violín: http://jsfiddle.net/h5E6C/

+0

Exactamente lo que estaba buscando. ¡Muchas gracias German Rumm! :) – Brian

+0

me salvó un par de horas! :) ¡muchas gracias! –

Cuestiones relacionadas