1

我正在研究 JQuery UI,我在点击锚点时阻止 UI,点击时我将一些 url 加载到 div 这就是为什么我阻止 UI 以防止点击然后解除阻止它,出现的问题是阻塞发生了一秒钟(或更少)并突然解除阻止,在这种情况下,请求 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 调用,CallAction那么您需要$.unblockUI在该 AJAX 调用的回调中调用 。

(作为旁注 - 请记住,AJAX 请求可能永远不会完成并永远挂起您的 UI,因此您应该添加一些超时以在一段时间后解除阻止 UI。)

于 2012-09-18T12:28:20.453 回答