Да, вы можете расширить поведение автозаполнения script.aculo.us. Вы делаете это путем переопределения метода onComplete
кодом, который обрабатывает данные json и создает для вас список <ul>
. Этот список должен быть отправлен на updateChoices
.
Скажем, вы получите следующий ответ JSON при поиске "U":
[
"Unicorn",
"University"
]
Пример расширения Ajax.Autocompleter, которое может обрабатывать ответ выше:
var MyCompleter = Class.create(Ajax.Autocompleter, {
initialize: function($super, id_search, id_list, url, options) {
$super(id_search, id_list, url, options);
},
onComplete: function(response) {
var text = response.responseText;
if (text.isJSON()) {
this.handleJSON(text.evalJSON());
}
// else do nothing
},
handleJSON: function(json) {
var htmlStr = '<ul>';
json.each(function(item) {
htmlStr += '<li>';
htmlStr += item;
htmlStr += '</li>';
});
htmlStr += '</ul>';
this.updateChoices(htmlStr);
}
});
Существует также пример того, как заменить поведение сброса ширины автозаполнения .