0

シナリオ

ページに jQueryUIautocompleteがあります。データは AJAX 呼び出しを介して取得されます。すべてが正常に機能しています。

質問

jQueryUI APIに関しては、sourceプロパティはセッターです。

取得したデータを公開するオートコンプリート プロパティはありますか?

言い換えれば、オートコンプリートのバインドされた入力に再び焦点を合わせても、以前に検索された用語が含まれている場合、ajax 呼び出しを再実行せずにオートコンプリートの結果を表示できますか?

私はすでに同様の質問を検索しました。SirDerpingtonのおかげで、結果メニューを再度開くことに成功しました。それでも、AJAX 呼び出しは再処理されます。

        $('mySelector').autocomplete().on("focus", function () {
            $(this).autocomplete("search");
        })

したがって、疑問は残ります。

4

2 に答える 2

1

私があなたを正しく理解していれば、ユーザーが入力に再び焦点を合わせた場合に同じ結果を表示したいですか?

私のjsfiddle場合はうまくいくようですが、これが AJAX 呼び出しをトリガーするかどうかはわかりません。とにかく私がしたことを見てください:

$('#autocomplete').autocomplete({
    source: availableTags,
    minLength: 0
}).focus(function () {
    var $this = $(this);
    var inputVal = $this.val();
    //just a check to prevent showing all results if inputVal is empty
    if (inputVal !== '') {
        $this.autocomplete("search");
    }
});

ドキュメントsearchがメソッドとして何を言っているかに注意してください:

パラメータなしで呼び出された場合、現在の入力の値が使用されます。

編集

一種の「キャッシュ」を使用することは、問題を解決する良い方法のようです。ソースを実際に使用できないため、jsfiddle を使用/echo/json/してキャッシュをソース全体 (availableTags) に設定しました。しかし、実際のリクエストがあり、レスポンスを保存しているとします。実際のソースを使用する場合は問題なく動作します。(結果がキャッシュされ、入力が変更されない場合、アラートはポップアップしません)

updated fiddle

更新されたコード

var cache = {};
$('#autocomplete').autocomplete({
    source: function (request, response) {
        var term = request.term;
        //check if searched input is in cache and return it as response
        if (term in cache) {
            response(cache[term]);
            return;
        }

        $.getJSON("/echo/json/", request, function (data, status, xhr) {
            alert("Request triggered!");
            //write response in cache
            cache[term] = availableTags;
            response(availableTags);
        });
    },
    minLength: 0
}).focus(function () {
    var $this = $(this);
    var inputVal = $this.val();
    if (inputVal !== '') {
        $this.autocomplete("search");
    }
});

コメントにも記載されていますが、ここでも:ドキュメント エントリ

于 2013-05-14T14:40:26.740 に答える