Gracias a Lance para poner yo en el camino correcto. Esta respuesta es seleccionable y funciona en jquery-ui-1.11.4.
$.ui.autocomplete.prototype._renderMenu = function (ul, items) {
var self = this;
ul.append("<li class='ui-autocomplete-category' aria-label='header'><div class='listFullName listHeader'>Name</div><div class='listEmployeeID listHeader'>Employee ID</div><div class='listJobTitle listHeader'>Job Title</div></li>");
$.each(items, function (index, item) {
self._renderItemData(ul, item);
});
};
$.ui.autocomplete.prototype._renderItem = function (table, item) {
return $("<li>")
.data("item.autocomplete", item)
.append("<div class='listFullName'>" + item.label + "</div>" + "<div class='listEmployeeID'>" + item.value + "</div>" + "<div class='listJobTitle'>" + item.JobTitle + "</div>")
.appendTo(table);
};
$("#employeeLookup").autocomplete({
source: [
{ value: 1, label: "Bob Smith", JobTitle: "President" },
{ value: 2, label: "Bob Washington", JobTitle: "Vice-President" },
{ value: 3, label: "Bobby Fischer", JobTitle: "Secretary" },
{ value: 4, label: "Bobby Brady", JobTitle: "Treasurer" },
{ value: 5, label: "Bobby Socks", JobTitle: "Senior Vice-President" },
{ value: 6, label: "Barney Rubble", JobTitle: "Sidekick" },
{ value: 7, label: "Brenda Stevens", JobTitle: "Assistant Senior Vice-President" }
],
minLength:1
});
Aquí está la CSS a continuación añado para dar formato a las columnas:
.listFullName{
width:200px;
display:inline-block;
}
.listJobTitle{
width:150px;
display:inline-block;
}
.listEmployeeID{
width:100px;
display:inline-block;
}
Nota que agregar la clase de 'ui-autocompletar-categoría' a la fila de encabezado para evitar que sea seleccionable en el resultados. Agregué el atributo aria-label para evitar una excepción de jQueryUI en tiempo de ejecución aparentemente causada por el encuentro de un elemento de la lista que no se procesó utilizando _renderItemData, aunque no hice una inmersión profunda en eso.
Ahora, si usted está tirando de los datos a través de AJAX, como en el siguiente ejemplo:
$("#employeeLookup").autocomplete({
source: function (request, response) {
// var id = $(this);
// alert(id);
$.ajax({
url: "Search.asmx/FindEmployee",
data: "{ 'partialName': '" + request.term + "'}",
dataType: "json",
type: "POST",
contentType: "application/json; charset=utf-8",
dataFilter: function (data) { return data; },
success: function (data) {
response($.map(data.d, function (item) {
return {
FullName: item.FullName,
EmployeeID: item.Person_ID,
JobTitle: item.JobTitle,
label: item.FullName,
value:item.FullName
}
}))
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(XMLHttpRequest);
}
});
},
minLength: 3,
delay: 500,
select: function (event, ui) {
alert("select" + ui.item.FullName);
}
});
Se podría cambiar la anulación _renderItem a esto:
$.ui.autocomplete.prototype._renderItem = function (table, item) {
return $("<li>")
.data("item.autocomplete", item)
.append("<div class='listFullName'>" + item.FullName + "</div>" + "<div class='listEmployeeID'>" + item.EmployeeID + "</div>" + "<div class='listJobTitle'>" + item.JobTitle + "</div>")
.appendTo(table);
};
En caso de éxito, jQueryUI está buscando elementos de "etiqueta" y "valor" en la matriz resultante. Puede asignar otros elementos también para su propia claridad de codificación, pero "etiqueta" es el elemento de matriz que jQueryUI Autocompletar buscará/filtrará, y "valor" es el elemento de matriz que JQueryUI Autocompletar pondrá en la entrada html una vez que seleccione un valor de la lista.
Cool. ¿Alguna vez descubrió cómo funciona la funcionalidad de desplazamiento/selección con este diseño? Por lo que he visto hasta ahora parece que está esperando una jerarquía ul/li/a – Milimetric
@Milimetric ¿Obtuviste esto trabajando con el vuelo estacionario? Estoy interesado en una solución también. –
No, lo siento @amiawizard y buena suerte. – Milimetric