8

私は次のような配列を持っています

["JOAQUIN", "BERNARDINO", "MODOC","ALASKA","MADERA", "ANDERSON"]

に入力していjQuery UI Autocompleteます。ただし、並べ替えの順序は奇妙に思えます。
例:(しかし、より多くのレコードがあります)「a」と入力すると、返されます

JOAQUIN
BERNARDINO
ALASKA
MADERA
ANDERSON

私がやろうとしているのは取得することです(から始めます)

ALASKA    
ANDERSON

私の例ではJSFiddle

出来ますか?誰かが私を正しい方向に向けることができますか.

アップデート:

ここに画像の説明を入力

4

4 に答える 4

5
var myarray= ["JOAQUIN", "BERNARDINO", "MODOC","ALASKA","MADERA", "ANDERSON"]
myarray.sort();

続きを読む

デモを見る

requestソースに2つの引数を渡していますresponse

  • requestis は作成中のリクエストオブジェクトを表し、この場合はテキストボックスに入力している文字です。

  • responseオートコンプリートの選択オプションを返す関数です。

内部$.mapでは、json という名前の配列で入力された単語をチェックしています。

json.toUpperCase().indexOf(request.term.toUpperCase())この行は、入力された単語と配列を同じケースに変換して返します。

そして一致は、あなたが尋ねたアイテムのリストを持つ最終結果になります.

response(matches);オートコンプリートに送信されます。

于 2013-09-20T04:15:25.150 に答える
5

単純な文字列配列ではなくオブジェクトで同じ問題に直面し、結果を取得した後に並べ替えを行う必要があります (リストの上部にある「startswith」の提案を実現するため)。将来の検索者のために、私のソリューションを追加します。

JQuery を使用すると、ユーザー入力で始まる結果オブジェクトの .label 内の文字列を検索し、残りの結果をそれらにマージできます。マージ後、Underscore.js ライブラリを使用して重複を削除します。

例えば:

var objects_array = [{"label":"A_ABC","value":"0"},{"label":"B_ABC","value":"1"},{"label":"C_ABC","value":"2"}];

$(document).ready ( function() {

$('#search').autocomplete({
    source: function (request, response) {

        var results = $.ui.autocomplete.filter(objects_array, request.term);               

        var top_suggestions = $.grep(results, function (n,i) {
                                 return (n.label.substr(0, request.term.length).toLowerCase() == request.term.toLowerCase());
                              });

        var merged_results = $.merge(top_suggestions,results);

        var final_results = _.uniq(merged_results,"label");

        response(final_results);
    }
});

});

jquery uiはで始まります

結果の例: http://i.stack.imgur.com/GKJ8d.png

于 2016-08-25T13:54:07.613 に答える