Изменение способа работы автозаполнения поиска - PullRequest
3 голосов
/ 20 июля 2011

В настоящее время у меня есть:

$("#location").autocomplete({source: cities, minLength: 0, autoFocus: true});

Проблема в том, что этот плагин ищет совпадения в любом месте внутри заданных входных данных.

Например, если я ввожу «Bos», он предлагает не только слова, начинающиеся с «Bos», но также и слова с «bos» в середине.

Как я могу это исправить?

Ответы [ 3 ]

0 голосов
/ 20 июля 2011

Это легко сделать в плагине jQuery Autocomplete, чья документация отвечает на это:

matchContains | Boolean | Default: false

Сравнение или нет заглядывает внутрь (то есть совпадает ли "ba" с "foo bar") результаты поиска. Важно только если вы используете кеширование. Не смешивать с автозаполнением.

Возможно, вы захотите переключиться на это из jQuery UI Autocomplete, поскольку он более полнофункциональный.

0 голосов
/ 20 июля 2011

Похоже, вам придется использовать настройку обратного вызова для опции source:

Третий вариант, обратный вызов, обеспечивает наибольшую гибкость и может использоваться для подключения любого источника данных к автозаполнению. Обратный звонок получает два аргумента:

  • Объект запроса с единственным свойством, называемым "term", который ссылается на значение в настоящее время в текстовом вводе. Например, когда пользователь ввел "new yo" в поле города, термин автозаполнения будет равно "новый год".
  • ответный обратный вызов, который ожидает, что один аргумент будет содержать данные, чтобы предложить пользователю. Эти данные должны быть отфильтрованы на основе предоставленный термин, и может быть в любом из описанных выше форматов для простых локальных данных (String-Array или Object-Array с метка / значение / оба свойства). Это важно при предоставлении пользовательских обратный вызов источника для обработки ошибок во время запроса. Вы должны всегда вызвать ответный обратный вызов, даже если вы столкнулись с ошибкой. это гарантирует, что виджет всегда имеет правильное состояние. (* 1 010 * источник )

Непроверенные:

$(function() {
    var options = ["Foo", "Bar", "Baz", "Foobar"];

    $(<selector>).autocomplete({
        source: function(request, response) {
                    var matches = [],
                        term = request.term.toLowerCase(),
                        termLen = term.length;

                    for (var i = 0, j = options.length; i < j; i++) {
                         if (options[i].substring(0, termLen).toLowerCase() == term) {
                             matches.push(options[i]);
                         }
                    }

                    response(matches);
            }
    });
});
0 голосов
/ 20 июля 2011

Как сказал @jensgram, вы можете использовать метод source.

Что-то подобное работает для меня в моем веб-приложении:

$("#location").autocomplete({
    source : function(request, response) {
        /* cities.html?query=... should return json array words starting with query value */
        $.getJSON('cities.html?query=' + request.term, function(data) {
            response(data);
        });
    }
});
...