自动填充显示所有结果

时间:2017-03-29 07:17:47

标签: javascript autocomplete

从第format.json页收集数据。

在JS中我有:

$('input[name="q"]').autoComplete({
    source: function(term, response){
        $.getJSON('/search.json', { q: term }, function(data){ response(data); });
    }
});

对于自动填充,我使用此plugin

输出的责任是什么?

我在自动完成功能中删除了所有名称。堕落只需要申请。有必要只删除那些重合的东西。

对此负责.indexOf(term)?怎么用?

enter image description here

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

1 个答案:

答案 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);
        });
    }
});