すでに開始されている完了を「中止」できるかどうかはわかりません。しかし、オートコンプリートのレンダー部分を中断することで、あなたが望むものを得ることができるかもしれません。これは、オートコンプリートがクエリとレンダリングで構成され、クエリがネットワークトランザクションを含む場合に機能します。
クエリとレンダリングがあり、クエリがローカルに格納されたリストを介した検索に過ぎない場合は、遅延が小さすぎるため、これはおそらく機能しません。
This SO questionは、jQueryオートコンプリートパッケージのrenderMenuとrenderItem fnsをモンキーパッチする方法を説明しています。私はあなたが同じ猿パッチアプローチを使用できると思っています。
ソースとして、URLではなく関数を指定する必要があります。 This SO questionについて説明します。次に、その関数内で、 "検索が進行中"であるというカウント変数をインクリメントします。次に、 "ajax get"を実行して検索を実行します。また、(a)単一の検索が処理中の場合にのみレンダリングし、(b)検索回数を減らすようにrenderMenuにパッチを適用します。
これはおそらく、次のようになります:
var queriesInProcess = 0;
var ac = $('#txt_search_city').autocomplete({
minLength: 3,
select : .... ,
// The source option can be a function that performs the search,
// and calls a response function with the matched entries.
source: function(req, responseFn) {
var url = baseUrl + req.term;
queriesInProcess++;
$.ajax({
url: url,
//data: data,
success: function(json,xhr) {
queriesInProcess--;
var a = ....retrieve from the json ....
responseFn(a);
},
errpr : function() { queriesInProcess--; },
dataType: 'json'
});
}
});
ac.data("autocomplete")._renderMenu = function(ul, items) {
if (queriesInProcess > 0) return;
var self = this;
$.each(items, function(index, item) {
self._renderItem(ul, item);
});
};
を使用すると、より洗練された取得したい場合は、あなたもabort the pending ajax requestに試すことができます。 これは、ソース関数で発生する必要があります。 $.ajax()
コールから返されたXHRをキャッシュに入れておく必要があります。新しいものが届くとabort()
に電話してください。
クエリを中止すると、オートコンプリートが表示されることはありません。ユーザーが入力をやめて結果をレンダリングするまで泣きたいですか? – Paul
基本的には、新しいクエリが送信された場合、最後のクエリを中止する必要があります。たとえば、入力中に一時停止してクエリを送信した後、入力を続けると、前のクエリが中止されます。 – Brenden
この質問はまったく役に立ちますか? http://stackoverflow.com/q/9040929/497356 –