我发现自定义返回值的最佳实践是创建解析函数。这允许您使用返回的 JSON 执行您想要的操作。在这个示例代码中,我没有处理 ajax 调用,但如果您需要,我也可以添加它。 jQuery UI Autocomplete 查找标签和值实体。您可以根据需要放入其中的任何一个,或者如果需要,甚至可以做一些自定义的东西。
var myStuff = [{
"uid": "123",
"UserName": "xxx"},
{
"uid": "124",
"UserName": "yyy"}];
function imAutocompleteJSONParse(data) {
var rows = [];
var rowData = null;
var dataLength = data.length;
for (var i = 0; i < dataLength; i++) {
rowData = data[i];
rows[i] = {
label: rowData.UserName,
value: rowData.UserName
};
}
return rows;
}
$("#Txt1").autocomplete({
source: function(request, response) {
var rows = imAutocompleteJSONParse(myStuff);
return response(rows);
},
minLength: 2
});
为了清楚起见,我把它放在一个小提琴页面中,这样你就可以看到它的工作:http://jsfiddle.net/MarkSchultheiss/TRKeE/
现在,因为我怀疑您想对结果做一些自定义/不同的事情,所以我创建了这个自定义示例来说明如何使用自定义值:http://jsfiddle.net/MarkSchultheiss/TRKeE/2/
不同的是我更改了解析函数并添加了一个新的自动完成选项。
var myStuff = [{
"uid": "123",
"UserName": "xxx"},
{
"uid": "124",
"UserName": "yyy"}];
function imAutocompleteJSONParse(data) {
var rows = [];
var rowData = null;
var dataLength = data.length;
for (var i = 0; i < dataLength; i++) {
rowData = data[i];
rows[i] = {
uid: rowData.uid,
UserName: rowData.UserName,
label: rowData.UserName,
value: rowData.uid
};
}
return rows;
}
$("#Txt1").autocomplete({
source: function(request, response) {
var rows = imAutocompleteJSONParse(myStuff);
return response(rows);
},
select: function(event, ui) {
var hasValue = (ui.item.value != undefined && ui.item.value != "" && ui.item.value != null);
if (hasValue) {
var focusedElement = $(this);
focusedElement.val(ui.item.label);
$('#labelResult').text(ui.item.label);
$('#valueResult').text(ui.item.label);
$('#customResult').text(ui.item.uid + ":" + ui.item.UserName);
return false;
}
else {
return false;
}
},
minLength: 2
});