Jquery UI Autocomplete: búsqueda desde múltiples atributos de una matriz

Hola, estoy intentando que el widget de autocompletado de la interfaz de usuario de jQuery funcione para que busque coincidencias de múltiples atributos de mi matriz (no solo uno que sí lo hace de manera predeterminada).

He ensuciado su ejemplo, sin embargo, todavía no estoy seguro de cómo resolver esto.

http://jsfiddle.net/FUZPN/

Aquí está mi formato de matriz en script

 var projects = [ { value: "jquery", label: "jQuery", desc: "the write less, do more, JavaScript library", other: "9834275 9847598023 753425828975340 82974598823" }, { value: "jquery-ui", label: "jQuery UI", desc: "the official user interface library for jQuery", other: "98 83475 9358 949078 8 40287089754 345 2345" }, { value: "sizzlejs", label: "Sizzle JS", desc: "a pure-JavaScript CSS selector engine", other: "49857 2389442 573489057 89024375 928037890" } 

Lo que estoy buscando es que si escribe “escribir”, el primer elemento debería aparecer en autocompletar, al igual que si escribe “jq”, aparecerán los primeros 2 elementos.


Según la documentación :

Array: se puede usar un array para datos locales. Hay dos formatos soportados:

  • Una matriz de cadenas: [ "Choice1", "Choice2" ]

  • Una matriz de objetos con propiedades de etiqueta y valor: [ { label: "Choice1", value: "value1" }, ... ]

La propiedad de la etiqueta se muestra en el menú de sugerencias. El valor se insertará en el elemento de entrada cuando un usuario seleccione un elemento. Si solo se especifica una propiedad, se usará para ambas, por ejemplo, si proporciona solo propiedades de valor , el valor también se usará como etiqueta .

¿Cómo lo codifico (duro) para que la fuente use 2 tags ( label y desc ) en lugar de una etiqueta ?


(Lo siento, he buscado muchas preguntas similares, sin embargo, todas apuntan a múltiples fonts, que no están aquí ya que solo tengo 1 matriz … ¿verdad?)

Autocompletar acepta un tercer tipo de fuente , una función, que puede proporcionar datos de la forma que considere más conveniente:

La tercera variación, una callback, proporciona la mayor flexibilidad y puede utilizarse para conectar cualquier fuente de datos a Autocompletar. La callback obtiene dos argumentos:

  • Un objeto de solicitud, con una propiedad de término único, que se refiere al valor actualmente en la entrada de texto. Por ejemplo, si el usuario ingresa “nuevo yo” en un campo de ciudad, el término Autocompletar será igual a “nuevo yo”.
  • Una callback de respuesta, que espera un solo argumento: los datos que se sugieren al usuario. Estos datos deben filtrarse según el término proporcionado y pueden estar en cualquiera de los formatos descritos anteriormente para datos locales simples. Es importante cuando se proporciona una callback de origen personalizado para manejar los errores durante la solicitud. Siempre debe llamar a la respuesta de respuesta incluso si encuentra un error. Esto asegura que el widget siempre tenga el estado correcto.

Esto significa que puedes escribir algo como esto

 $( "#project" ).autocomplete({ source: function (request, response) { // request.term is what you typed console.log(request.term); //call response with an array containing the filtered data response([...]); } }); 

Una solución simple a su problema:

 function lightwell(request, response) { function hasMatch(s) { return s.toLowerCase().indexOf(request.term.toLowerCase())!==-1; } var i, l, obj, matches = []; if (request.term==="") { response([]); return; } for (i = 0, l = projects.length; i 

Y un Fiddle http://jsfiddle.net/FUZPN/5/