12

jQuery-autocompleteプラグインを使用して、サーバーへのAJAX呼び出しを使用して入力文字列を完成させるための提案を取得しています。また、サーバーは結果を表示したい順序で返しますが、オートコンプリートは別の順序で結果を表示します。

出力を並べ替えないようにjQueryオートコンプリートを構成するにはどうすればよいですか?データはすでに必要に応じてランク付け/ソートされているため、クライアント側での処理は必要ありません。

4

3 に答える 3

20

オートコンプリートに送信する前にサーバーの結果を並べ替えるだけで実行できます。

したがって、関数をecho json_encode($return_arr);使用する前にsort()$return_arr

次のようなことも試すことができます。

ロジックは、用語で始まる一致の配列を構築し、それを用語を含むがそれで始まらない一致と連結することです。

$(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));
        }
    });
});

例: http: //jsfiddle.net/zkVrs/

ソース: https ://stackoverflow.com/a/8302996/973155

于 2012-06-08T12:35:48.670 に答える
11

さて、思ったより簡単でした。プラグインのコードを読み、出力を並べ替えるコードをコメントアウトして変更することにしました。

それは私がデフォルトで変数'sortResults:true'を見つけたときです。したがって、必要なのはその変数をfalseに設定することだけでした。しかし、私はこれをドキュメントで見つけませんでした。

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

これで、出力は私が必要とする正確な順序になりました。

ここから問題を見つけて解決するためのコードを読むというアイデアを思いつきました:jQueryの「オートコンプリート」プラグインがデータの順序を台無しにしています (これは同じプラグインではありません)

ありがとう。:)

于 2012-06-08T14:16:09.377 に答える
1

jQueryオートコンプリートプラグインの現在のビルドにはsortResultsオプションがないため、この問題の別の解決策を検索する必要があり、プラグインが結果を並べ替える唯一の理由は、オブジェクトを含む純粋な配列ではない場合は常にサーバーの応答が正規化されることです{label : ...、 価値: ...}。

PHPを使用する言語と見なすと、json_encode(array_values($ your_array)); トリックを行う必要があります。

于 2014-05-20T14:30:52.737 に答える