Вопрос по jquery-autocomplete, jquery – jQuery Автозаполнение порядка результатов

8

Я используюплагин jQuery-автозаполнение получить предложения по заполнению входной строки с помощью вызова AJAX на сервере. Кроме того, сервер заботится о возвращении результатов в том порядке, в котором я хотел бы, чтобы они появлялись, но автозаполнение показывает их в другом порядке.

Как я могу настроить автозаполнение jQuery, чтобы не изменять порядок вывода? Я не требую какой-либо обработки на стороне клиента, поскольку данные уже ранжированы / отсортированы в соответствии с требованиями.

то, что вы подразумеваете под "автозаполнением", показывает их в другом порядке ". ? Shyju
Я имею в виду, что порядок строк, отображаемых в раскрывающемся списке, отличается от порядка, возвращаемого сервером (который представляет собой строку разделенной последовательности символов \ n, как указано в документации). rajatkhanduja

Ваш Ответ

3   ответа
18

Простая сортировка результатов сервера перед отправкой на автозаполнение должна сделать это.

Так что перед вамиecho json_encode($return_arr); использоватьСортировать() функция на$return_arr

You can also try something like this:

Логика состоит в том, чтобы создать массив совпадений, которые начинаются с термина, а затем объединить его с совпадениями, которые содержат термин, но не начинаются с него.

$(document).ready(function () {
    var source = ['Adam', 'Benjamin', 'Matt', 'Michael', 'Sam', 'Tim'];
    $("input").autocomplete({
        source: function (request, response) {
            var term = $.ui.autocomplete.escapeRegex(request.term)
                , startsWithMatcher = new RegExp("^" + term, "i")
                , startsWith = $.grep(source, function(value) {
                    return startsWithMatcher.test(value.label || value.value || value);
                })
                , containsMatcher = new RegExp(term, "i")
                , contains = $.grep(source, function (value) {
                    return $.inArray(value, startsWith) < 0 &&
                        containsMatcher.test(value.label || value.value || value);
                });

            response(startsWith.concat(contains));
        }
    });
});

Example: http://jsfiddle.net/zkVrs/

Source: https://stackoverflow.com/a/8302996/973155

Поделитесь своим кодом.
the server takes care of returning the results in the order I would want them to appear but autocomplete shows them in a different order.  Похоже, ОП уже делает это.
Фархан, если ты не написал вышеупомянутый код, это этикет, чтобы поделиться своим источником. Эндрю Уитакер опубликовал это в прошлом году в ссылке rajatkhanduja, упомянутой выше.
stackoverflow.com/a/8302996/277923 Я прочитал это по приведенной выше ссылке, но не могу понять, как я могу использовать это, чтобы «не сортировать»; совсем. Я хотел бы, чтобы jQuery-autocomplete показывал результат в порядке, возвращенном вызовом ajax. rajatkhanduja
это потрясающе! Сортировка элементов, начинающихся с термина перед алфавитной сортировкой, является огромным улучшением удобства использования при автозаполнении больших наборов. Спасибо!
1

Поскольку в текущей сборке плагина jQuery Autocomplete нет параметров sortResults, мне пришлось искать другое решение этой проблемы и выяснить единственную причину, по которой плагин приводит к сортировке, заключается в том, что ответ сервера нормализуется каждый раз, когда он не является чистым массивом. с объектами {label: ..., value: ...}.

Рассматривая PHP как язык вашего использования,json_encode(array_values($your_array)); должен сделать свое дело.

Спасибо @sKopheK! Просто для пояснения, предоставьте это параметру ответа исходной функции:[ {label: "suggestion", value: "suggestion"}, ] -- не это:["suggestion",]
9

Ну, это оказалось проще, чем я думал. Я решил прочитать код плагина и изменить его, закомментировав код, который сортирует мой вывод.

В этот момент я нашел переменную «sortResults: true» по умолчанию. Итак, все что мне нужно было установить эту переменную в false. Я не нашел это в документации, хотя.

$('#search').autocomplete ( { url: "index.php", sortResults: false } )

Теперь вывод в том порядке, в котором я нуждаюсь.

У меня появилась идея прочитать код, чтобы найти / решить проблему отсюда:jQuery & quot; Автозаполнение & quot; плагин портит порядок моих данных (Это не тот же плагин)

Благодарю. :)

Это больше похоже на то, что гораздо проще отобразить предварительно обработанный результат с сервера, чем на стороне клиента. +1
Большой! Не забудьте принять собственный ответ :)
Обязательно сделаю это через 48 часов. rajatkhanduja
Вы уверены, что используетеjQuery UI AutoComplete widget ? Я просматривал документацию по исходным текстам и API GitHub и 1. параметр url не существует 2. sortResults никогда не появляется нигде в источнике (версия 1.8) ...
он использовалgithub.com/dyve/jquery-autocomplete

Похожие вопросы