Из тонкой инструкции :
Локальные данные могут быть простым массивом строк или содержать объекты для каждого элемента в массиве со свойством метки или значения, либо и тем, и другим. Свойство метки отображается в меню предложений. Значение будет вставлено в элемент ввода после того, как пользователь выберет что-то из меню.
Таким образом, label
переходит в выпадающее меню, а value
переходит в <input type="text">
, и вам нужно что-то немного другое, вы хотите одну вещь в <input type="text">
и меню и другую вещь в отдельном <input type="hidden">
.
Предположим, вы получили необработанные данные, подобные этой, с вашего сервера:
var raw = [
{ value: 1, label: 'one' },
{ value: 2, label: 'two' },
{ value: 3, label: 'three' },
{ value: 4, label: 'four' }
];
Тогда вы можете построить массив и простой объект отображения:
var source = [ ];
var mapping = { };
for(var i = 0; i < raw.length; ++i) {
source.push(raw[i].label);
mapping[raw[i].label] = raw[i].value;
}
Массив source
будет передан .autocomplete()
, а ваш обработчик select
будет использовать mapping
, чтобы выяснить, что поместить в <input type="hidden">
:
$('.tags').autocomplete({
source: source,
select: function(event, ui) {
$('.tags_id').val(mapping[ui.item.value]);
}
});
Демо: http://jsfiddle.net/ambiguous/GVPPy/