【发布时间】:2011-08-26 07:25:34
【问题描述】:
问题的简版
当输入字符串与结果字符串匹配时,自动完成功能有效,否则无效。数据已成功从 JSON 中检索。
加长版
我想用 JSON 数据动态编辑自动完成的源内容。
当搜索字符串匹配 first_name 和 last_name 字段时,以下方法有效。
但 JSON url 返回更多,例如通过搜索用户名它仍然返回正确的数据。但这并没有在自动完成中显示,我的理论是自动完成 UI 会强制“输入值”与“结果值”相同。
JSON 数据返回:
[
{"pk": 1012912, "fields": {"first_name": "Barack", "last_name": "Obama"}},
{"pk": 1017519, "fields": {"first_name": "George", "last_name": "Bush"}}
]
自动完成代码
如您所见,结果集是由搜索功能设置的。
$('#search').autocomplete({
source: [],
search: function(event, ui){
results = [];
var json = jQuery.getJSON('http://jsondata.com?query='+event.target.value, function(data){
for (var i=0; i<data.length; i++){
results.push(data[i].fields.first_name + ' ' +data[i].fields.last_name);
};
}).success(function(){
$('#search').autocomplete('option', 'source', results);
//The following debug proves that the 'results' are correct, even on search for usernames
console.log(results);
});
},
});
如果我在#search 字段中搜索“Barack Obama”,我会得到我的结果,没问题。 但是,如果说 Barack Obama 的用户名是“baracko”并且我搜索他的用户名,那么我会从 JSON 和结果数组中得到正确的结果(正如我使用 console.log 检查过的那样),但没有显示结果。
有人知道为什么吗?
为未来的谷歌员工或感兴趣的人提供解决方案
感谢 ek_ny 的一些提示,这是我的新 JSON:
[{ 'value' : 'Barack Obama'}, { 'value' : 'George Bush'}]
这里是代码:
$('#search').autocomplete({
source: function(req, res){
jQuery.getJSON('http://jsondata.com/?query='+req.term, req, function(data){
var results = [];
$.each(data, function(i, val){
results.push(val.value)
});
//Add results to callback
res(results);
});
},
});
【问题讨论】:
标签: jquery jquery-ui autocomplete jquery-autocomplete jquery-ui-autocomplete