Объяснение кода приведено ниже.Autocomplete иногда не показывает результатов с сервера
Вот автозаполнения я использую (но я рассмотрел 3 других пакетов автозаполнения, и все они ведут себя точно так же):
https://goodies.pixabay.com/javascript/auto-complete/demo.html
А вот как я использую его на на стороне клиента (обратите внимание, что я использую автозаполнение в сочетании с socket.io так что я могу обновить мое автозаполнение, как пользователь вводит в поле поиска):
socket.on('searchBarResults', function(data) {
var my_autoComplete = new autoComplete({
selector: 'input[name="searchbar4"]',
minChars: 1,
cache: false,
source: function(term, suggest){
term = term.toLowerCase();
var choices = [
data[0]._source.movie
];
var matches = [];
for (i=0; i<choices.length; i++)
if (~choices[i].toLowerCase().indexOf(term)) matches.push(choices[i]);
suggest(matches);
}
});
$searchBar4.on('input', function(event){
my_autoComplete.destroy();
});
});
так вот что все это происходит: когда пользователь начинает вводить имя фильма, после каждого вводимого слова сервер ищет базу данных для соответствия и отправляет результаты клиенту.
Например: если пользователь ищет Star, сервер отправит обратно Star Trek Неоткрытая Страна и SearchBox покажет вариант автозаполнения под названием Star Trek Неоткрытая Страна.
Это хорошо работает и все.
Если пользователь Star Trek сервер, снова отправить обратно Star Trek Неоткрытой Страны и автозаполнение будет обновляться. Хорошо.
Вот вопрос у меня есть:
Если пользователь Star Страна, сервер будет послать назад Star Trek Неоткрытая Страна, но автозаполнения не будет отображать его.
Автозаполнение отображает результаты, только если слова находятся в порядке (вы не можете пропустить слова).
Как я могу получить автозаполнение до всегда показать результаты с сервера, независимо от того, какой пользователь вводит слова в поле поиска?
Он, похоже, не работает. В частности, в отношении 'indexOf (word) == -1' говорится об использовании' (word) ': * Возможная итерация над непредвиденными (пользовательскими/унаследованными) членами, возможно, отсутствует hasOwnPropery ... * – MonkeyOnARock
Хорошо, я изменил 'indexOf (word) == -1' to' indexOf (word) == 0', и изначально кажется, что он работает. Если я наберу ** Star Country **, я получаю полный результат ** Star Trek Undiscovered Country **. Я собираюсь сделать больше тестов и подтвердить позже. – MonkeyOnARock
Да, это было неправильно. Я обновил код с помощью рабочего фрагмента. – smoksnes