9

JQuery UI ドキュメントから:

responseイベントは)検索が完了した後、メニューが表示される前にトリガーされます。提案データのローカル操作に役立ちます。

(ui.content引数) には応答データが含まれており、表示される結果を変更するために変更できます。

ただし、イベントを変更ui.contentしてもresponse、ドロップダウンに表示される結果には影響せず、コードは無視されます。ここに私の(テスト)コードがあります:

$('input.autocomplete').autocomplete({
    source: new Array({label: 'test1', value: 'test1'}, {label: 'test2', value: 'test2'}),
    response: function( event, ui ) {
        ui = {content: new Array({label: 'test3', value: 'test3'}, {label: 'test4', value: 'test4'})};
    }
});

理論的には、用語が「t」の場合、 test3とtest4がオートコンプリート オプションとして表示されるはずですが、そうではありません。test1test2を取得します。

私は何が欠けていますか?

あなたが私にこのスレッドを指摘したい場合に備えて、私はバージョン 1.9.2 を使用しています。

4

1 に答える 1

11

sourceを傍受する代わりに、属性を使用して検索のソースを設定しようとするとどうなりますresponseか? このフィドルを見てください。

基本的には次のようにします。

$("input.johndoe").autocomplete({
        source: [
            "test1",
            "test2",
            "test3"
            ...
            ],
        ...

PS それはこの質問から来ています: jQuery UI オートコンプリートで結果が検出されない

編集1:まあ。応答イベントのある時点で console.log を設定すると (この例のように)、検索で結果が返されなくても、ui.content に 2 つの要素があることがわかります。そのため、コールバックで更新された ui を送信することが問題のようです。まだ見て...

編集2:ある意味でそれを手に入れました。この更新された jsfiddle を見てください。コンテンツ配列をクリアし、新しいものを設定します。なぜそれが空にならないのか、まだ推測していてui.content = [];、ちょっとイライラします。おそらく、JQuery オブジェクト内にあるという事実に関連している可能性があります (純粋で単純な配列として定義されている場合でも)。

フィドル

push メソッドを使用して、目的のキーと値の組み合わせを配列に配置するだけです。

// Set default content
      for ( var i = 0; i = ui.content.length; i++ ) {
        ui.content.pop();
      }
      ui.content.push({ label: "pepe", value: "pepe" });

そして、それは常に望ましい提案のリストを表示するので、うまくいきます。それが役に立てば幸いです。おそらく他の誰かがよりエレガントなソリューションを見つけます。

Edit3 : @andrewWhithaker が提案するソリューションを追加するだけで、それも機能します (元のコンテンツ配列が大きすぎる場合に時間がかかるかどうかは確認していません)。

スプライスのフィドル

それは全体のポップを変更し、1 つのスプライスで以前のアプローチをプッシュします。

 ui.content.splice(0, ui.content.length, { 'label': 'test3', 'value': 'test3' });
于 2013-01-17T21:56:25.453 に答える