【问题标题】:Jquery autocomplete, how to search on words instead of stringJquery自动完成,如何搜索单词而不是字符串
【发布时间】:2011-03-30 21:31:11
【问题描述】:

我有一个文本框,我希望有一个自动完成功能,让用户可以搜索地址。用户必须能够输入不同的单词,并且自动完成必须搜索它们以缩小其列表。

我一直在尝试并阅读文档,但似乎没有任何效果,因为它总是搜索整个字符串而不是单词。我错过了什么吗?

例子:

当用户输入“Mathias Antwerp”时,他必须看到包含这些词的所有地址。在示例中,它必须显示 1 行,即第二行。

<script>
var addresses = [
    { name: "Frederick Dereave Gentstreet 4 Gent" },
    { name: "Mathias Derian Meilaan 9 Antwerp" },
    { name: "Mathias Hors frelaan 5 Kortrijk" }
];    

$(document).ready(SetAutoComplete);

function SetAutoComplete() {

    $("#testveld").autocomplete(emails,
        {
            matchContains: "word"
        }
    );
}
</script>
<input type="text" id="testveld" style='width:300px'/>

【问题讨论】:

    标签: javascript jquery html jquery-ui autocomplete


    【解决方案1】:

    我更改了 jquery.autocomplete.js 中 matchSubset 的代码,它启用了我正在寻找的行为。

    function matchSubset(s, sub) {
    
        var arraySub=sub.split(" ");
    
        if (!options.matchCase) 
            s = s.toLowerCase();
        var i = s.indexOf(sub);
        if (options.matchContains == "word"){
            i = s.toLowerCase().search("\\b" + sub.toLowerCase());
        }
    
        //addition for split words
        if (options.matchContains == "splittedword"){
            for(itemindex=0;itemindex<arraySub.length;itemindex++){
    
                i = s.toLowerCase().search(arraySub[itemindex].toLowerCase());
                if(i==-1){
                    break;
                }
            }
        }
    
        if (i == -1) return false;
        return i == 0 || options.matchContains;
    };
    

    【讨论】:

      【解决方案2】:

      AFAIK,您必须自己进行一些处理才能将字符串解析为单词。您可以使用 jquery 来执行此操作,或者如果您计划从服务器端获取地址,则使用一些服务器端语言。

      【讨论】:

      • 我不能强制自动完成显示不符合他自己逻辑的值,或者我可以吗?
      • @MichaelD - 除非您将一些自己的逻辑添加到 jquery-ui 代码中,否则我不推荐这样做。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多