Я думаю, что еще немного исправлений в порядке:
/* Override the _response function to always open the suggestions menu: */
thing.data("autocomplete")._response = function(content) {
if (!this.options.disabled) {
this._trigger("open");
content = this._normalize(content);
this._suggest(content);
}
this.pending--;
if (!this.pending) {
this.element.removeClass("ui-autocomplete-loading");
}
};
Пример: http://jsfiddle.net/eJMuf/
Это должно сработать, но я продолжу искать решение с использованием стандартного API.
<ч />
Вот еще одно решение, которое не требует много операций на открытом сердце, но требует больше кода:
var thing = $("#thing").autocomplete({
minLength: 0,
/* Use a source function instead of the array */
source: function(request, response) {
var result = myArray.slice(0);
/* Filter the array normally... */
result = $.ui.autocomplete.filter(result, request.term);
/* Add a placeholder result that we can process later */
result.push({
value: request.term,
isPlaceholder: true
});
response(result);
}
}).focus(function() {
$(this).autocomplete("search", this.value);
});
var renderItem = thing.data("autocomplete")._renderItem;
/* Override the _renderItem function to display the placeholder item */
thing.data("autocomplete")._renderItem = function(ul, item) {
if (item.isPlaceholder) {
return $("<li>")
.data("item.autocomplete", item)
.append("<a class='helper'>Add <b>\"" + item.value + "\"</b> as a new item</a>")
.appendTo(ul);
} else {
renderItem(ul, item);
}
};
Пример: http://jsfiddle.net/FvCY6/
Я бы лично выбрал это решение, поскольку оно менее инвазивно.