9

JQuery UI プラグインblockUIを使用して、すべての ajax リクエストに対して UI をブロックしています。それは魅力のように機能しますが、オートコンプリートの提案アイテムを取得するために ajax 呼び出しを行っているときに、UI をブロックしたくありません (または、少なくとも「お待ちください」メッセージを表示したくありません)。それ、どうやったら出来るの?オートコンプリート機能に jquery オートコンプリート プラグインを使用しています。

オートコンプリートの UI をブロックしないようにブロック UI プラグインに指示する方法はありますか?

4

5 に答える 5

21
$('#myWidget').autocomplete({
    source: function(data, callback) {
        $.ajax({
            global: false,  // <-- this is the key!
            url: 'http:...',
            dataType: 'json',
            data: data,
            success: callback
        });
    }
});
于 2010-04-18T13:06:01.247 に答える
2

うーん、jqueryに欠けている機能のようです:)グローバルフラグを使用して、オートコンプリート呼び出しであるかどうかを示し、一般的なautcompletefunctionでラップすることができます

    var isAutoComplete  = false;
    function autoComplete(autocomplete){
    isAutoComplete = true;
    if($(autocomplete).isfunction())
       autocomplete();
    }

        $(document).ajaxStart(function(){if(!isAutoComplete)$.blockUI();}).ajaxStop(function(){isAutoComplete = false;$.unblockUI();});

それは良い解決策ではありませんが、うまくいくはずです...

于 2010-04-23T11:47:23.010 に答える
1

デコレータを使ってみる

$.blockUI = function() {
    if (condition_you_dont_want_to_block) {
        return;
    }
    return $.blockUI.apply(this, arguments);
}

または、よりスマートな独自のブロック関数を作成できます

function my_blockUI() {
    if (condition_you_dont_want_to_block) {
        return;
    }
    $.blockUI();
}
$(document).ajaxStart(my_blockUI).ajaxStop($.unblockUI);
于 2010-04-18T06:03:33.707 に答える
1

グローバル jQuery イベント ハンドラーに追加することで、blockUI をページ上のすべての関数で機能するように設定できます。オートコンプリート ajax 呼び出しで呼び出されないようにするには、呼び出しがオートコンプリート コールかどうかを判断する必要があります。問題は、これらのグローバル関数が利用できる情報がそれほど多くないことです。ただし、ajaxSend はいくつかの情報を取得します。ajax 呼び出しを行うために使用される設定オブジェクトを取得します。設定オブジェクトには、送信されるデータ文字列があります。したがって、できることは、ページ上のすべての ajax リクエストのすべてのデータ文字列に次のように追加することです。

&notautocomplete=notautocomplete

例えば:

$.ajax({data:"bar=1&foo=2&notautocomplete=notautocomplete"})

次に、このコードをドキュメント準備セクションに何よりも先に配置できます。

$(document).ajaxSend(
    function (event, xhr, ajaxOptions){
     if(ajaxOptions.data.indexOf("notautocomplete") !== -1){
         $.blockUI;
     }
});
$(document).ajaxStop($.unblockUI);

もちろん、他のより良いアイデアは、URL などのオートコンプリート リクエストで一意のものを探すことですが、それは使用しているオートコンプリート プラグインとその使用方法によって異なります。

于 2010-04-23T00:07:30.573 に答える
0

モーダル ブロック (ブロック UI) を使用するということは、ユーザーからの入力をブロックすることを意味します。完了。

上記の UI は自己矛盾しているようです!

于 2010-04-16T03:46:06.997 に答える