Javascript 自动完成显示所有结果

Javascript 自动完成显示所有结果,javascript,autocomplete,Javascript,Autocomplete,从页面format.json收集数据 在JS中,我有: $('input[name="q"]').autoComplete({ source: function(term, response){ $.getJSON('/search.json', { q: term }, function(data){ response(data); }); } }); 对于自动完成,我使用这个 输出的责任是什么? 我已经在自动完成中删除了所有的名字。若要退出,只需申请即可。只

从页面
format.json
收集数据

在JS中,我有:

$('input[name="q"]').autoComplete({
    source: function(term, response){
        $.getJSON('/search.json', { q: term }, function(data){ response(data); });
    }
});
对于自动完成,我使用这个

输出的责任是什么?

我已经在自动完成中删除了所有的名字。若要退出,只需申请即可。只有那些重合的才有必要删除

是否对其负责
.indexOf(term)
?使用什么


屏幕显示所有结果(有匹配项的和没有匹配项的)。只需要查看那些匹配的数据。

因为您要从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);
        });
    }
});

变量
选项
必须是数据数组吗?如何做到这一点?我只想显示前5个值。我们可以限制下拉项的数量吗?当然,您可以更改行
响应(匹配项)
响应(匹配.slice(0,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);
        });
    }
});