Jquery自动完成,如何按单词而不是字符串搜索

3
我有一个文本框,想要添加一个自动完成功能,让用户可以搜索地址。用户必须能够输入不同的单词,自动完成必须搜索这些单词以缩小列表。
我一直在尝试和阅读文档,但似乎没有什么方法可以做到这一点,因为它总是在整个字符串上搜索而不是单词。我是否遗漏了什么?
例如:
当用户输入“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'/>
2个回答

7
我修改了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;
};

0
据我所知,您将不得不自己进行一些处理来将字符串解析为单词。您可以使用jQuery来完成这个任务,或者如果您计划从服务器端获取地址,则可以使用一些服务器端语言。

我无法强制自动完成显示与其自身逻辑不匹配的值,对吗? - MichaelD
@MichaelD - 除非你在jquery-ui代码中添加一些自己的逻辑,否则不要这样做,我不建议这样。 - vikmalhotra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接