Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Jquery自动完成,如何搜索单词而不是字符串_Javascript_Jquery_Html_Jquery Ui_Autocomplete - Fatal编程技术网

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

Javascript Jquery自动完成,如何搜索单词而不是字符串,javascript,jquery,html,jquery-ui,autocomplete,Javascript,Jquery,Html,Jquery Ui,Autocomplete,我有一个文本框,我想有一个自动完成,让用户搜索通过地址。用户必须能够键入不同的单词,并且自动完成必须搜索这些单词以缩小其列表 我一直在尝试和阅读文档,但似乎没有任何效果,因为它总是搜索整个字符串而不是单词。我错过什么了吗 例如: 当用户输入“Mathias Antwerp”时,他必须看到包含这些单词的所有地址。在本例中,它必须显示第二行中的一行 <script> var addresses = [ { name: "Frederick Dereave Gentstreet 4

我有一个文本框,我想有一个自动完成,让用户搜索通过地址。用户必须能够键入不同的单词,并且自动完成必须搜索这些单词以缩小其列表

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

例如:

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

<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'/>

变量地址=[
{名称:“弗雷德里克·德里埃夫·根特街4号”},
{名称:“Mathias Derian Meilaan 9 Antwerp”},
{名称:“Mathias Hors frelaan 5 Kortrijk”}
];    
$(文档).ready(设置自动完成);
函数SetAutoComplete(){
$(“#testveld”).autocomplete(电子邮件、,
{
“单词”
}
);
}

好的,您必须自己进行一些处理才能将字符串解析为单词。您可以使用jquery来实现这一点,或者如果您计划从服务器端获取地址,那么可以使用一些服务器端语言。

我更改了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;
};
函数匹配子集(s,sub){
var arraySub=子拆分(“”);
如果(!options.matchCase)
s=s.toLowerCase();
var i=s.indexOf(sub);
if(options.matchContains==“word”){
i=s.toLowerCase().search(\\b“+sub.toLowerCase());
}
//分词加法
if(options.matchContains==“splittedword”){

for(itemindex=0;itemindexi无法强制自动完成显示与他自己的逻辑不匹配的值,或者我可以?@MichaelD-除非您将自己的一些逻辑添加到jquery ui代码中,否则我不建议这样做。