You could add a hidden field to store your id
(let's give it an id of myhiddenid
) and set your autocomplete field's value to the label returned from your function. Adding return false;
will cancel the event's default behavior
The default action is to replace the text field's value with the value of the selected item.
var myhiddenid = $("#myhiddenid");
var lastname = $("#lastname");
lastname.autocomplete({
source: function (request, response) {
var term = request.term;
if (term in cache) {
response(cache[term]);
return;
}
$.ajax({
type: 'POST',
url: someurl,
dataType: 'json',
data: { "Name": request.term},
success: function (result) {
var Surnames = JSON.parse(result.data);
cache[term] = ($.map(Surnames, function (item) {
return {
label: item.homename,
value: item.id
}
}));
response(cache[term]);
},
error: function (a, b, c) {
debugger;
}
});
},
focus: function (event, ui) {
lastname.val(ui.item.label);
myhiddenid.val(ui.item.value);
return false;
},
select: function (event, ui) {
lastname.val(ui.item.label);
myhiddenid.val(ui.item.value);
self.Surname(ui.item.value);
console.log(self.Surname());
return false;
},
minLength: 2
});