Если вы хотите получить предложения по пункту «Джон Доу», как только Пользователь наберет «J», вам лучше заглянуть в Три (да, Три, а не Дерево!) и реализуйте его (найдите библиотеку), или вы можете рассчитывать на полные запросы;сначала вам нужно разделить слова по пробелам и собрать каждое слово;
var jsonArray=[{"name":"foo bar"},{"name":"john doe"}];
var wordLookup={};
var item,split;
for (var i=0,e=jsonArray.length;i<e;++i){
item=jsonArray[i];
split=item.split(" ");
for (var u=0;u<split.length;++u){
if (typeof wordLookup[ split[0] ]==="undefined"){
wordLookup[ split[0] ]=[];
}
wordLookup[ split[0] ].push(i);
}
}
, тогда у вас будет поле ввода
<input type="text" id="suggestion" name="suggestion"/>
, и вы привязаете к нему событие, которое ищетдля подобранного слова при нажатии клавиши
document.getElementById("suggestion").addEventListener("keydown",function(e){
var list="",val,vs,ve;
for (vs=0,ve=this.value.length;vs<ve;++vs){
if (vs===0){val="";}
val+=this.value.charAt(vs);
if ( wordLookup[val] ){
for (var i=0;e=wordLookup[val].length;i<e;++i){
list+="- "+jsonArray[ wordLookup[val][i] ].name;
}
}
}
alert("possible matches; "+list);
});
'к сожалению', невозможно переэкспериментировать ключ объекта (hash / map).Я бы предложил перебрасывать все расширенные возможности a, ab, abc, abcd .., как показано в коде выше.
Конечно, вместо того, чтобы предупредить пользователя о том, что он может выбрать, показать ему те из выпадающего списка, которые он может выбрать, это путь.Но мой код должен направить вас в правильном направлении, как это сделать.