从第format.json
页收集数据。
在JS中我有:
$('input[name="q"]').autoComplete({
source: function(term, response){
$.getJSON('/search.json', { q: term }, function(data){ response(data); });
}
});
对于自动填充,我使用此plugin。
输出的责任是什么?
我在自动完成功能中删除了所有名称。堕落只需要申请。有必要只删除那些重合的东西。
对此负责.indexOf(term)
?怎么用?
屏幕显示所有结果(匹配和没有匹配的结果)。只需要查看匹配的那些。
答案 0 :(得分:1)
当您从JSON文件中获取数据时,您必须在客户端进行过滤。它与服务器的实际AJAX请求一起工作的方式,您只需在服务器上进行过滤,只返回您需要的数据(这就是您将查询字词作为参数发送的原因)。
因此,您需要将代码更改为:
$('input[name="q"]').autoComplete({
source: function (term, response) {
$.getJSON('/search.json', function (data) {
term = term.toLowerCase();
var matches = [];
for (i = 0; i < data.length; i++)
if (~data[i].toLowerCase().indexOf(term)) matches.push(data[i]);
response(matches);
});
}
});
您可能需要做一些不同的事情,具体取决于data
结构的外观,但我假设它是一个字符串数组
编辑
如果你想限制你的匹配你可以在for循环中而不是在最后一行中这样做,这对性能会更好,因为它一旦你得到了5就不会循环匹配
$('input[name="q"]').autoComplete({
source: function (term, response) {
$.getJSON('/search.json', function (data) {
term = term.toLowerCase();
var matches = [];
for (i = 0; i < data.length; i++)
if (~data[i].toLowerCase().indexOf(term) && matches.length == 4) {
matches.push(data[i]);
break;
}
response(matches);
});
}
});