Проблема в том, что виджет autocomplete
ожидает, что ваши данные будут отформатированы следующим образом:
[
{ label: 'Potomac Electric Power Co.', value: '1234' },
{ label: 'Virginia Electric & Power Co.', value: '1234' }
]
(Если ваше имя / значение совпадают, вам нужно только указать свойство value)
Разница между тем, как вы это делаете, и тем, как это делает демо jQueryUI, заключается в том, что они не используют промежуточный объект, как у вас.Вы сказали виджету, как визуализировать каждый элемент, но виджет не знает, как найти каждого кандидата при поиске.
Я бы исправил это, массируя ваши данные, используя $.map(...)
функция.Это позволит вам преобразовать ваши данные в более дружественный массив autocomplete
.Что-то вроде:
var friendly = $.map(data.Utilities, function(el) {
return { label: el.name, value: el.id };
});
и затем измените ваш обработчик событий select
:
select: function( event, ui ) {
$provider_name.val( ui.item.label );
$provider_id.val( ui.item.value );
return false;
}
Обратите внимание, что вы можете предоставить больше информации в каждом объекте массива source
.Вы даже можете получить доступ к этим данным в обработчиках событий.Просто убедитесь, что вы указали свойства label
и value
.