jQuery Автозаполнение порядка результатов

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

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

 Shyju08 июн. 2012 г., 14:35
то, что вы подразумеваете под "автозаполнением", показывает их в другом порядке ". ?
 rajatkhanduja08 июн. 2012 г., 15:52
Я имею в виду, что порядок строк, отображаемых в раскрывающемся списке, отличается от порядка, возвращаемого сервером (который представляет собой строку разделенной последовательности символов \ n, как указано в документации).

Ответы на вопрос(3)

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

Так что перед вами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

 26 мар. 2013 г., 16:54
Фархан, если ты не написал вышеупомянутый код, это этикет, чтобы поделиться своим источником. Эндрю Уитакер опубликовал это в прошлом году в ссылке rajatkhanduja, упомянутой выше.
 rajatkhanduja08 июн. 2012 г., 15:55
stackoverflow.com/a/8302996/277923 Я прочитал это по приведенной выше ссылке, но не могу понять, как я могу использовать это, чтобы «не сортировать»; совсем. Я хотел бы, чтобы jQuery-autocomplete показывал результат в порядке, возвращенном вызовом ajax.
 08 июн. 2012 г., 16:15
Поделитесь своим кодом.
 08 июн. 2012 г., 14:41
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.  Похоже, ОП уже делает это.
 13 февр. 2014 г., 12:39
это потрясающе! Сортировка элементов, начинающихся с термина перед алфавитной сортировкой, является огромным улучшением удобства использования при автозаполнении больших наборов. Спасибо!

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

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

 13 июл. 2015 г., 21:57
Спасибо @sKopheK! Просто для пояснения, предоставьте это параметру ответа исходной функции:[ {label: "suggestion", value: "suggestion"}, ] -- не это:["suggestion",]
Решение Вопроса

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

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

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

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

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

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

 08 июн. 2012 г., 16:30
Большой! Не забудьте принять собственный ответ :)
 14 дек. 2016 г., 11:36
он использовалgithub.com/dyve/jquery-autocomplete
 06 авг. 2013 г., 15:53
Это больше похоже на то, что гораздо проще отобразить предварительно обработанный результат с сервера, чем на стороне клиента. +1
 rajatkhanduja08 июн. 2012 г., 16:34
Обязательно сделаю это через 48 часов.
 19 мая 2014 г., 09:05
Вы уверены, что используетеjQuery UI AutoComplete widget ? Я просматривал документацию по исходным текстам и API GitHub и 1. параметр url не существует 2. sortResults никогда не появляется нигде в источнике (версия 1.8) ...

Ваш ответ на вопрос