1

私はJQueryUIに取り組んでいます、アンカーをクリックするとUIをブロックします、クリックするといくつかのURLをdivにロードします。そのため、クリックを防ぐためにUIをブロックしてからブロックを解除します。発生する問題は、ブロックが1秒間発生することです。 (またはそれ以下)突然ブロックが解除され、この場合、リクエストURLが完全に読み込まれず、ユーザーは別のアンカーをクリックできます

$('.carousel-main .carousel ul li a').each(function () {
            $(this).click(function (e) {

    $.blockUI({ message: "Please wait..." }); 
                e.preventDefault();
                var hrefvalue = $(this).attr('href');
                CallAction(hrefvalue, true);
                $.unblockUI()

            });
        });

上記のコードは正常に機能しています。$。blockUIの代わりに以下のコードを使用してみましたが、以下のコードを使用しても何も起こりません。

var timeout = setTimeout(function() {
    $.blockUI({ message: "Please wait..." }); 
}, 2000);

この状況の時間間隔を設定するにはどうすればよいですか

4

1 に答える 1

0

美化されたときのコードは次のようになります。

$('.carousel-main .carousel ul li a').each(function () {
    $(this).click(function (e) {

        $.blockUI({
            message: "Please wait..."
        });
        e.preventDefault();
        var hrefvalue = $(this).attr('href');
        CallAction(hrefvalue, true);
        $.unblockUI()

    });
});

これは、インタプリタがイベントループに入ることなく、とが次々に呼び出されることを意味し$.blockUIます$.unblockUI。おそらく、CallActionブロックしている場合でも(ただし、UIをブロックする必要がないため、ブロックしていないと思います)、$.blockUI何もする機会がありません。

$.unblockUIこの関数からを削除してみて、$.blockUI呼び出しが実際に必要なことを実行するかどうかを確認してください。その場合は、$.unblockUI()待機している処理が完了した後に呼び出されるコールバック関数を呼び出す必要があります。これは、を呼び出しているのと同じ関数ではありません$.blockUI

待ちたいコードを表示しませんでしたが、内部でAJAX呼び出しを行っていると仮定すると、そのAJAX呼び出しのコールバックでCallActionを呼び出す必要があり$.unblockUIます。

(補足として、AJAXリクエストが終了せず、UIが永久にハングする可能性があるため、しばらくしてからUIのブロックを解除するためにタイムアウトを追加する必要があることに注意してください。)

于 2012-09-18T12:28:20.453 に答える