This question already has answers here:
twitter typeahead ajax results not all shown
                                
                                    (2个答案)
                                
                        
                                2年前关闭。
            
                    
我正在使用twitter typeahead来提供从Web服务返回的结果的下拉列表。我发现它仅显示这些结果的一部分;显然,它抑制了以相同第一个单词开头的任何单词。

    var $termInput = $("#someId");
    var lookup = new Bloodhound({
        datumTokenizer:  Bloodhound.tokenizers.whitespace,
        queryTokenizer: Bloodhound.tokenizers.whitespace,
        remote: {
                url:/search/ + "%QUERY",
                wildcard: '%QUERY'
        }
    });

    lookup.initialize();

    $termInput.typeahead(
        { hint: true, highlight: true },
        {
            source: lookup,
            name: 'cases',
            displayKey: 'id',
            valueKey: 'id',
            templates: {
                empty: "<div class='omniboxresult nomatch'>No matching cases found</div>",
                suggestion: function(data) {
                    console.log(data);


                    return "<div class='omniboxresult'><div class='caseName'>" + "hi " +data.text + "</div></div>";
                }
            }
        }
    );


HTML是:

<input type=text" class="form-control" id="someId" value="" data-provider="typeahead" autocomplete="off">


使用网络标签,我知道我的网络服务正在返回(当我输入“欧元”时):

[{"id":"1991003933","level":0,"text":"EUROPEAN COMMUNITY"},
{"id":"1971004125","level":0,"text":"EUROPEAN ECONOMIC COMMUNITY"},
{"id":"2011007673","level":0,"text":"EUROPEAN UNION"},
{"id":"2011000582","level":0,"text":"EUROPEAN UNION"}]


但是我的输出中只有以下内容:

javascript - Twitter提前输入时未显示以相同单词开头的结果-LMLPHP

如果我输入“ e”,则会得到更多结果,例如不会被抑制的“英语”(但我仍然只能得到以“ EUROPEAN”开头的结果

为什么会发生这种情况,我如何显示它收到的所有结果?

最佳答案

当我想显示名称的自动填充建议时,我的项目遇到了类似的问题。我想显示关于名字,名字和姓氏的自动填充建议。我的实现最终看起来像这样:

Sar = Sara, Sarah, Saralou, Sarchenko, Sargent

Sarah[space] = Sarah, Sarah Majercik, Sarah Maddux, Sarah Zarek, Sarah Anderson

这并不完美,因为我希望有人不再显示空格Sarah时会显示出来,但是我还没有弄清楚。我的解决方案是在我的数据集之前按字母顺序排列所有唯一的名字和姓氏。我正在使用prefetch,但我认为remote也有可用的filter方法:

var lookup = new Bloodhound({
    datumTokenizer:  Bloodhound.tokenizers.whitespace,
    queryTokenizer: Bloodhound.tokenizers.whitespace,
    remote: {
            url:/search/ + "%QUERY",
            filter: function(list) {
                var uniques = [];
                // parse out unique names

                // my list was literally a list of first and last names so I concat them, you'll likely need to do a bit more work here
                return uniqes.concat(list);
            },
            wildcard: '%QUERY'
    }
});


使用此方法,您的结果将如下所示:

EURO = EUROPEAN, EUROPEAN COMMUNITY, EUROPEAN ECONOMIC COMMUNITY, EUROPEAN UNION

希望这可以帮助。

10-08 16:55