我正在使用jQuery的自动完成功能和Web服务。标准的东西。
问题是当我尝试获得如下所选的'值'时,我会看到'标签'数据。
这是绑定返回数据的代码段:
// suggest/addresses/{howMany:int?}/{useBoundary?}/{boundarySize?}/{useBias?}/{query?}/{latitude?}/{longitude?}
var url = "/api/v1/Suggest/Addresses/UK/20/0/0/1/"
$('#pickupaddress').autocomplete({
source: function (request, response) {
$.ajax({
url: url,
data: { query: request.term,
latitude: $('#Latitude').val(),
longitude: $('#Longitude').val()
},
dataType: 'json',
type: 'GET',
success: function (data) {
response($.map(data, function (item) {
return {
label: item.DisplayAddress, // holds full address = correct
value: item.LocatorId // also holds full address but should be database ID
}
}));
}
})
},
select: function (event, ui) {
$('#pickupaddress').val(ui.item.label);
$('#LocatorID').val(ui.item.value);
// But below still shows label as the selected value
alert('You selected an address with a LocatorID of ' + $('#LocatorID').val());
return false;
},
minLength: 3
});
我立即认为自动完成代码一定有问题,但经过进一步调查后,看起来函数确实正确显示了值字段(我试着明确地设置它)所以不知何故''value'字段正在拾取与'相同的数据'绑定期间标记'字段。
所以我接下来检查了网络服务,但这似乎很好。当我直接查询Web服务时,我看到它正在返回正确的数据。
"SuggestedAddressesSimple": [
{
"DisplayAddress": "Mendip Road, Farnborough, Hampshire, GU14 9HL",
"LocatorID": "630593"
},
{
"DisplayAddress": "Menin Way, Farnham, Surrey, GU9 8DY",
"LocatorID": "630679"
}
etc...
这是某种数据绑定问题吗?如何在jQuery值中正确反映返回的数据?
结果这是一个简单的错字。我输入了“LocatorId”而不是“LocatorID”。
奇怪的是,我被jQuery Autocomplete的行为引向错误的“发现”路径。
我想jQuery自动完成功能足够聪明,意识到没有传递任何值,因此使用标签作为值。