Из документации :
Локальные данные могут быть простым массивом строк или содержать
Объекты для каждого элемента в массиве со значением label или
свойство или оба
Плагин автозаполнения ожидает в качестве источника массив объектов со свойствами: label или / и значение
Ваша переменная js
не подходит для этого:
синтаксис неверен. Массив объектов должен быть определен следующим образом: [{key1: 'key1', key2: 'key2'}, ...]
вы не можете использовать $ .parseJSON (), поскольку это не объект json, а массив. Просто выведите свой php так:
var js = <?php echo $json; ?>; // $json being [{uid:"11443624",name:"angela"},...]
Когда автозаполнение выполняет поиск на основе ввода, оно использует опцию source
. Внутри плагин ожидает, что опция source
будет функцией для выполнения. Хитрость заключается в том, что когда вы указываете массив или URL, плагин создает обертку вокруг него, чтобы иметь возможность использовать его (см. ответ ).
Если у вас есть пользовательский источник данных, вы можете указать в качестве ожидаемой функции параметр source
. Это имеет форму:
source: function(request, response) { ... }
Параметр запроса содержит одно свойство request.term
, которое представляет собой текст, введенный во входные данные, параметр ответа - это функция для отображения меню с предложениями. Используйте это так:
$("#nominee_input").autocomplete({
source: function(request, response) {
// $.map() builds an array understandable by autocomplete
// $.ui.autocomplete.filter() will filter the array based on the request.term
var filteredData = $.ui.autocomplete.filter($.map(arr, function(item) {
return {
value: item.name,
label: item.name,
uid: item.uid
};
}), request.term);
// use the response callback to display the results
response(filteredData);
}
});
Демонстрация по jsfiddle
Если у вас есть определенный источник данных (с другими свойствами, кроме метки и значения), вы можете не отображать результаты в произвольном порядке. Для этого вы не можете переопределить метод по умолчанию _renderItem
плагина автозаполнения:
$("#nominee_input").autocomplete({ ... })
.data("autocomplete")
._renderItem = function( ul, item ) {
return $( "<li></li>" )
.data( "item.autocomplete", item )
.append( $('<a>' + item.label + ' - ' + item.uid + '</a>')
.attr('data-uid', item.uid)
)
.appendTo( ul );
};